在Kubernetes中通过代码创建文件

时间:2019-03-27 14:40:52

标签: python kubernetes google-cloud-platform geopandas

我需要(或至少我认为我需要)创建一个文件(可以是临时文件,但目前在我测试它时不起作用),可以在其中复制存储在Google云存储中的文件。 / p>

此文件是geojson文件,加载后,我将使用geopandas读取它。

该代码将在Google Cloud的Kubernete中运行


  

代码:

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))
    <...>

问题是:

如何在kubernetes中创建文件?

或者,如何在geopandas中使用文件的内容作为字符串(如果我使用download_as_string)来完成geopanda.read_file(name)的作用?


  

额外

我尝试使用:

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

但是我有以下错误:

DriverError: '/vsigs/bucket/xxx.geojson' does not exist in the file system, and is not recognized as a supported dataset name.

2 个答案:

答案 0 :(得分:0)

模式的一般概述:

您可以先将代码放在git存储库中。在Kubernetes上,使用ubuntu映像创建一个部署/吊舱,并确保您安装python,您的python依赖项并在初始化脚本中提取您的代码,最后一行调用python以运行您的代码。在pod模板的“命令”属性中,应该使用/ bin / bash运行脚本。假设您具有正确的凭据,则可以从Google存储空间中获取文件并进行处理。要进行调试,可以使用“ kubectl exec”将其附加到正在运行的容器。

希望这会有所帮助!

答案 1 :(得分:0)

避免在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))