Кадр данных со столбцами широта и долгота .Создание нового столбца с проверкой udf
, находится ли соответствующий почтовый индекс в списке почтовых индексов.
Я получаю разные результаты в зависимости от того, определяю ли я search
внутри или снаружи in_borough
.
from uszipcode import SearchEngine
from pyspark.sql.functions import udf
search = SearchEngine(simple_zipcode=True)
lat= 40.77898
long = -73.96925
zipcodes = [10023]
def in_borough(lat, long):
# search = SearchEngine(simple_zipcode=True)
result = search.by_coordinates(lat, long, radius=1,returns=1)
return (int(result[0].zipcode) in zipcodes) if (len(result) > 0) else False
within_borough = udf(in_borough, BooleanType())
df = spark.createDataFrame([{'lat': lat, 'long': long}])
# calling the function
print(in_borough(lat, long))
# calling the udf
df.select('lat', 'long', within_borough('lat', 'long').alias('within_borough')).show()
Выход для функции:
True
Выход для udf с search
определено внутри функция:
+--------+---------+--------------+
| lat| long|within_borough|
+--------+---------+--------------+
|40.77898|-73.96925| True|
+--------+---------+--------------+
Вывод для udf с search
определенным внешним функцией:
---------------------------------------------------------------------------
Py4JJavaError Traceback (most recent call last)
<ipython-input-165-bbbd186ea9d1> in <module>
61
62 # calling the udf
---> 63 df.select('lat', 'long', within_borough('lat', 'long').alias('within_borough')).show()
[...]
330 raise Py4JError(
Py4JJavaError: An error occurred while calling o3794.showString.
[...]
AttributeError: type object 'weakref' has no attribute '__callback__'
[...]