2016-06-02 2 views
1

Я пытаюсь передать Numpy массив функции питона, как показано ниже:AttributeError: «numpy.ndarray» объект не имеет атрибута «_get_object_id»

polygonArr = np.empty([3,2]) 
for i in range(0,3): 
    polygonArr[i,0]=someValue 
    polygonArr[i,1]=somevalue 

polygonArrObj = np.asarray(polygonArr) 

point_inside_polygon_ = udf(point_inside_polygon,BooleanType()) 

df1=df.where(point_inside_polygon_(df_gst['lattd_c'],df_gst['lngtd_c'],polygonArrObj)) 

df1 и пеленгации искровые dataframes

Функция point_in_a_polygon_ нуждается в массиве. Но когда я пытаюсь запустить его, я получаю ошибку

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

Мне нужно изменить numpy.ndarray к нормальному объекту массива делать, или я что-то еще не хватает? Если мне нужно изменить объект массива, как мне это сделать?

ответ

2

Spark SQL UDF может принимать только столбцы или столбцы литералов в качестве аргумента. Он не может принимать произвольный объект Python. Поскольку для VectorUDT не существует буквального синтаксиса, вам необходимо пройти polygonArrObj, используя закрытие:

def inside_polygon_(polygon): 
    return udf(
     lambda lat, long: point_inside_polygon(lat, long, polygon), 
     BooleanType() 
    ) 

df.where(inside_polygon_(polygonArrObj)('lattd_c', 'lngtd_c')) 
Смежные вопросы