2016-08-18 2 views
0

У меня есть набор данных в формате Lat/Lon для пользователей за определенный промежуток времени, и я хотел бы фильтровать записи с использованием функций ГИС. Например, нахождение записей внутри многоугольника (ST_Contains из ГИС мира) и используя ESRI geodatabase файл, чтобы добавить столбец, который является район, что запись пользователя находится в.Как географически фильтровать записи в PySpark?

Я искал в Интернете и нашел Magellan, но Поддержка Python - not working. Я также нашел поддержку Hive для функций ГИС в Esri Spatial, но не нашел документацию о том, как загрузить правильный пакет при запуске PySpark или как зарегистрировать необходимые функции в оболочке PySpark: (ST_Polygon, ST_Contains и т. Д. ...).

Есть ли другие альтернативы, которые я должен изучить? Я использую HDInsight Azure, чтобы я иметь доступ к объекту HiveContext в PySpark оболочки:

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

Пример набора данных:

| Отметка | Пользователь | Широта | Долгота | | 1462838468 | 49B4361512443A4DA ... | 39.777982 | -7.054599 | | 1462838512 | 49B4361512443A4DA ... | 39.777982 | -7.054599 | | 1462838389 | 49B4361512443A4DA ... | 39.777982 | -7.054599 | | 1462838497 | 49B4361512443A4DA ... | 39.777982 | -7.054599 | | 1465975885 | 6E9E0581E2A032FD8 ... | 37.118362 | -8.205041 | | 1457723815 | 405C238E25FE0B9E7 ... | 37.177322 | -7.426781 | | 1457897289 | 405C238E25FE0B9E7 ... | 37.177922 | -7.447443 | | 1457899229 | 405C238E25FE0B9E7 ... | 37.177922 | -7.447443 | | 1457972626 | 405C238E25FE0B9E7 ... | 37,18059 | -7,46128 | | 1458062553 | 405C238E25FE0B9E7 ... | 37.177322 | -7.426781 | | 1458241825 | 405C238E25FE0B9E7 ... | 37.178172 | -7.444512 | | 1458244457 | 405C238E25FE0B9E7 ... | 37.178172 | -7.444512 | | 1458412513 | 405C238E25FE0B9E7 ... | 37.177322 | -7.426781 | | 1458412292 | 405C238E25FE0B9E7 ... | 37.177322 | -7.426781 | | 1465197963 | 6E9E0581E2A032FD8 ... | 37.118362 | -8.205041 | | 1465202192 | 6E9E0581E2A032FD8 ... | 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 |

ответ

1

Вы можете использовать любую библиотеку python с Spark, не требуя, чтобы библиотека была специфичной для Spark. Некоторые библиотеки библиотек ГИС, рекомендованные для случайного поиска, находятся в http://spatialdemography.org/essential-python-geospatial-libraries/

Вам нужно будет установить библиотеку, которую вы хотите использовать. Инструкции о том, как установить библиотеки можно найти здесь: https://stackoverflow.com/a/38754345/1663781

Затем просто добавить столбец в РДУ, используя любой из библиотек, например, так:

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