小编Lui*_*che的帖子

pyspark 数据框和多边形(geopandas)之间的空间连接

问题 :

我想在以下之间进行空间连接:

  • 带有(例如道路上的点)的大型 Spark 数据框(500M 行)
  • 带有多边形(例如区域边界)的小型 geojson(20000 个形状)。

这是我到目前为止所拥有的,我发现它很慢(很多调度程序延迟,可能是因为公社没有广播):

@pandas_udf(schema_out, PandasUDFType.GROUPED_MAP)
def join_communes(traces):   
    geometry = gpd.points_from_xy(traces['longitude'], traces['latitude'])
    gdf_traces = gpd.GeoDataFrame(traces, geometry=geometry, crs = communes.crs)
    joined_df = gpd.sjoin(gdf_traces, communes, how='left', op='within')
    return joined_df[columns]
Run Code Online (Sandbox Code Playgroud)

pandas_udf 将一些数据帧(轨迹)作为熊猫数据帧,将其转换为带有 geopandas 的 GeoDataFrame,并操作与多边形GeoDataFrame的空间连接(因此受益于 Geopandas 的 Rtree 连接)

问题:

有没有办法让它更快?我知道我的公社地理数据框位于 Spark Driver 的内存中,并且每个工作人员都必须在每次调用 udf 时下载它,这是正确的吗?

但是我不知道如何让这个 GeoDataFrame 直接对工作人员可用(如在广播连接中)

有任何想法吗 ?

python pandas geopandas pyspark pyspark-sql

6
推荐指数
1
解决办法
1135
查看次数

标签 统计

geopandas ×1

pandas ×1

pyspark ×1

pyspark-sql ×1

python ×1