AttributeError: тип объекта «слабый реф» не имеет атрибута «__callback__» - PullRequest
0 голосов
/ 26 марта 2019

Кадр данных со столбцами широта и долгота .Создание нового столбца с проверкой 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__'
[...]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...