Фильтр PySpark: AttributeError: объект 'numpy.float32' не имеет атрибута '_get_object_id'

В PySpark я хотел бы отфильтровать фрейм данных искры, подобный этому

 temp_df = df1.filter(df1.latitude_float.between(lat_min, lat_max) & df1.longitude_float.between(lng_min, lng_max))

df1 - это фрейм данных, созданный с помощью spark.sql, вот результаты printSchema

 |-- vin_nbr: string (nullable = true)
 |-- timstm_hm: string (nullable = true)
 |-- latitude: string (nullable = true)
 |-- longitude: string (nullable = true)
 |-- make: string (nullable = true)
 |-- model: string (nullable = true)
 |-- timstm_hm_timestamp: timestamp (nullable = true)
 |-- latitude_float: float (nullable = true)
 |-- longitude_float: float (nullable = true)

Как видите, latitude_float и longitude_float действительно являются плавающими. _6 _, _ 7 _, _ 8_ и lng_max также являются плавающими. Почему я получаю эту ошибку?

AttributeError: 'numpy.float32' object has no attribute '_get_object_id'

person Tracy Yang    schedule 21.02.2020    source источник
comment
ваш lat_min numpy float или собственный float python?   -  person E.ZY.    schedule 21.02.2020
comment
@ E.ZY. Я понял. Проблема в том, что я сравнивал float32 с float64. Я делаю их одного типа, и это работает. Спасибо.   -  person Tracy Yang    schedule 25.02.2020


Ответы (1)


Кажется, вы передаете несколько типов искру. Напечатайте type(lat_min), что он выводит? Это должен быть чистый тип Python <class 'float'>

Чтобы преобразовать тип numpy в python, вызовите его .item() методы

lat_min.item()
person dre-hh    schedule 21.02.2020
comment
Я понял. Проблема в том, что я сравнивал float32 с float64. Я делаю их одного типа, и это работает. Спасибо. - person Tracy Yang; 25.02.2020