【问题标题】:How to save dataframe as shp/geojson in PySpark/Databricks?如何在 PySpark/Databricks 中将数据框保存为 shp/geojson?
【发布时间】:2022-12-15 01:08:49
【问题描述】:

我有一个在其中一列中包含 WKT 的 DataFrame。如果需要,可以将该列转换为 geojson。

有没有办法在 Databricks/PySpark 中将此数据保存(输出到存储)为 geojson 或 shapefile?

数据框示例:

Id Color Wkt
1 Green POINT (3 7)
2 Yellow POLYGON ((30 10, 40 40, 20 40, 10 20, 30 10))

DataFrame 可以有大约 100K 行甚至更多。

我试过使用 Geopandas 库,但它不起作用:

import geopandas as gpd

# df is as PySpark dataframe

# Covert it to Pandas dataframe
pd_df = df.toPandas()
pd_df['geometry']=pd['point_wkt'].apply(wkt.loads)

# Convert it to GeoPandas dataframe
gdf  = gpd.GeoDataFrame(pd, geometry='geometry')

# The following fails:
gdf.to_file(os.path.join(MOUNT_POINT,output_folder,"shapefile.shp"))

错误是:

Failed to create file /mnt/traces/output_folder/shapefile.shp: No such file or directory

该错误没有任何意义,因为文件夹 /mnt/traces/output_folder/ 确实存在,并且我已成功将 PySpark 数据帧作为 CSV 保存到其中。

df.write.csv(os.path.join(MOUNT_POINT,output_folder), sep='\t')

在本地运行时,我可以使用上述代码将 GeoPandas 数据帧保存到 shapefile,但不能在 Spark (Databricks) 上运行。

【问题讨论】:

    标签: pyspark databricks geospatial geojson shapefile


    【解决方案1】:

    如果您使用的是 Databricks 那么

    dbutils.library.installPyPI("geopandas")
    dbutils.library.installPyPI("shapely")
    dbutils.library.installPyPI("geojsonio")
    

    如果您使用的是 pyspark,那么它将类似于 Python 环境

    pip3 install shapely
    pip3 install geopandas
    pip3 install geojsonio
    

    在写入路径之前请检查路径是否安装在数据块中

    display(dbutils.fs.ls('/mnt/traces'))
    

    【讨论】:

    • 我试过使用 GeoPandas,但出现了一个奇怪的错误。你能再看看我的问题吗?我已经添加了额外的信息。
    • 不要使用dbutils.library.installPyPI!使用%pip代替
    • @AlexOtt 谢谢,但这不是这里的问题。我在笔记本之外的集群级别安装了 Geopandas。
    • 这是对 Subash 的评论
    • @AlexOtt 顺便说一句,我参考了 Databricks 的公共文档-databricks-prod-cloudfront.cloud.databricks.com/public/…。它还取决于开发人员基于工作簿或集群级别的选择
    【解决方案2】:

    如果你使用 dbutils.fs.ls("/mnt/traces/output_folder/") 你会看到这个路径:数据库文件系统:/mnt/traces/output_folder/shapefile.shp 将我们带到我们的解决方案:

    解决方案:写作时我们可以使用/dbfs/mnt/对于路径而不是/mnt/lab/:

    gdf.to_file("/dbfs/mnt/traces/output_folder/shapefile.shp")
    

    祝你好运!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-06-15
      • 2015-12-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多