如何在pyspark中按地理位置过滤条目?

flseospp  于 2021-05-29  发布在  Hadoop
关注(0)|答案(1)|浏览(419)

我有一个以lat/lon格式的用户数据集,我想使用gis功能过滤条目。例如,在多边形内查找条目(stïu包含来自gis世界的条目)并使用esri地理数据库文件添加一个列,该列是用户条目所在的地区。
我在网上搜索了一下,找到了magellan,但是python的支持现在不起作用。我在esri spatial中也发现了对gis函数的配置单元支持,但没有找到有关如何在启动pyspark时加载正确包或如何在pyspark shell中注册所需函数的文档:(st\u polygon、st\u contains等)。
我还有其他选择吗?我正在使用azure的hdinsight,因此可以访问pyspark shell中的hivecontext对象:

>>> sqlContext
<pyspark.sql.context.HiveContext object at 0x7f3294093b10>

示例数据集:
|用户|用户|用户|用户|纬度|经经纬度| | 142828284848488468 |用户|用户|用户|用户;用户;用户|纬度|经经经经经纬;A4DA……;39.77777974747474747474747482 |用户| 39.77747474747474747474747474747474747474747474747474747474747474747474747474747474743636363636| | 1465975885 | 6e9e0581e2a032fd8…| 37.118362 |-8.205041 ||14577457723815 | 405C23825E25FE0FE0B9E7;;37.177322 | | 7.426781;;37.17728282815 | 1457878787878787415;;;C238E25Fe0B9E7…| 37.177322 |-7.426781 | 1458241825 | 405c238e25fe0b9e7…| 37.178172 |-7.444512 ||145824444457 | 145824444457 | 405C238E25FE5FE0B9E7 | 37.178172 | | | 37.178172 | 7.444512;;;145848484848484848412513 9E0581E2A032FD8…| 37.118362 |-8.205041 | 1465923817 | 6e9e0581e2a032fd8…| 37.118362 |-8.205041 ||1465923766 | 6e9e0581e2a032fd8 | 37.118362 |-8.205041 | 1465923748 | 6e9e0581e2a032fd8 | 37.118362 |-8.205041 | 1465923922 | 6e9e0581e2a032fd8 | 37.118362 |-8.205041|

bvpmtnay

bvpmtnay1#

您可以使用任何带有spark的python库,而不需要特定于spark的库。一些随机搜索推荐的一些gis python库位于http://spatialdemography.org/essential-python-geospatial-libraries/
您必须安装要使用的库。有关如何安装库的说明,请参见:https://stackoverflow.com/a/38754345/1663781
然后,只需使用任何库向rdd添加一列,如下所示:

from my_gis_library_of_choice import in_polygon, district

text_lines = sc.textFile('wasb:///mydataset')
split = text_lines.map(lambda line: line.split('|'))
with_extra_columns = split.map(lambda r: r.append(in_polygon(r[2], r[3])).append(district(r[2], r[3])))

相关问题