Create a file throught code in Kubernetes

3/27/2019

I need (or at least I think I need) to create a file (could be a temp file but for now it does not work while I was testing it) where I can copy a file stored in google cloud storage.

This file is a geojson file and after load the file i will read it using geopandas.

The code will be run it inside a Kubernete in Google Cloud


The code:

def geoalarm(self,input):
    from shapely.geometry import Point
    import uuid
    from google.cloud import storage
    import geopandas as gpd       

    fp = open("XXX.geojson", "w+")
    storage_client = storage.Client()
    bucket = storage_client.get_bucket('YYY')
    blob = bucket.get_blob('ZZZ.geojson')
    blob.download_to_file(fp)
    fp.seek(0)
    PAIS = gpd.read_file(fp.name)

    (dictionaryframe,_)=input
    try:
        place = Point((float(dictionaryframe["lon"])/100000), (float(dictionaryframe["lat"]) / 100000))
    <...>

The questions are:

How could I create the file in kubernetes?

Or, how could I use the content of the file as string (if I use download_as_string) in geopandas to do the equivalent of geopanda.read_file(name)?


Extra

I tried using:

PAIS = gpd.read_file("gs://bucket/xxx.geojson")

But I have the following error:

DriverError: '/vsigs/bucket/xxx.geojson' does not exist in the file system, and is not recognized as a supported dataset name.
-- IoT user
geopandas
google-cloud-platform
kubernetes
python

2 Answers

3/27/2019

A solution to avoid to create a file in kubernetes:

storage_client = storage.Client()
bucket = storage_client.get_bucket('buckte')
blob = bucket.get_blob('file.geojson')
string = blob.download_as_string()
PAIS = gpd.GeoDataFrame.from_features(json.loads(string))
-- IoT user
Source: StackOverflow

3/27/2019

A VERY general overview of the pattern:

You can start by putting the code on a git repository. On Kubernetes, create a deployment/pod with the ubuntu image and make sure you install python, your python dependencies and pull your code in an initialization script, with the final line invoking python to run your code. In the "command" attribute of your pod template, you should use /bin/bash to run your script. Assuming you have the correct credentials, you will be able to grab the file from Google Storage and process it. To debug, you can attach to the running container using "kubectl exec".

Hope this helps!

-- Frank Yucheng Gu
Source: StackOverflow