AttributeError:'numpy.ndarray'对象没有属性'_get_object_id'

时间:2016-06-02 11:43:43

标签: arrays python-2.7 numpy multidimensional-array pyspark

我正在尝试将numpy数组传递给python函数,如下所示:

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和df是火花数据帧

函数point_in_a_polygon_需要一个数组。 但是当我尝试运行它时,我收到了错误

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

我是否需要将numpy.ndarray更改为普通数组对象,否则我会遗漏其他内容?如果我需要更改为数组对象,我该怎么做?

1 个答案:

答案 0 :(得分: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'))
相关问题