PickleException:构造 ClassDict 的预期参数为零(numpy.dtype)
PickleException: expected zero arguments for construction of ClassDict (for numpy.dtype)
我不明白如何解决这个问题,我已经解决了这里的一些问题,但没有找到完全合适的答案。
我有一个包含以下重要列的数据框:building_id、面积、高度。
我尝试编写的 UDF 计算面积的平方根与高度之间的差值。它 return 是一个值,应该添加到数据框中。
def calculate_difference(area, height):
# calculate the square root of the area
import numpy as np
nr = np.sqrt(area)
# calculate the difference between the square root of the area and the height
dif = nr - height
return dif
然后我注册这个UDF:
calculate_differenceUDF = udf(calculate_difference)
当我传递两个数字时该函数起作用,它 return 是我期望的值。我想在我的数据框中添加一个新列,其中我们有一个基于函数的计算值。
display(df.withColumn("diff", calculate_differenceUDF(col("area"), col("height"))))
然后我收到这个错误:
PickleException: expected zero arguments for construction of ClassDict
(for numpy.dtype)
我知道我 return 可能不是正确的类型,但我不知道如何解决它! :)
我觉得你应该先把numpy.sqrt()
的返回值转成python的float类型
def calculate_difference(area, height):
nr = float(np.sqrt(area))
dif = nr - height
return dif
然后注册UDF
calculate_differenceUDF = udf(calculate_difference, FloatType())
我不明白如何解决这个问题,我已经解决了这里的一些问题,但没有找到完全合适的答案。
我有一个包含以下重要列的数据框:building_id、面积、高度。
我尝试编写的 UDF 计算面积的平方根与高度之间的差值。它 return 是一个值,应该添加到数据框中。
def calculate_difference(area, height):
# calculate the square root of the area
import numpy as np
nr = np.sqrt(area)
# calculate the difference between the square root of the area and the height
dif = nr - height
return dif
然后我注册这个UDF:
calculate_differenceUDF = udf(calculate_difference)
当我传递两个数字时该函数起作用,它 return 是我期望的值。我想在我的数据框中添加一个新列,其中我们有一个基于函数的计算值。
display(df.withColumn("diff", calculate_differenceUDF(col("area"), col("height"))))
然后我收到这个错误:
PickleException: expected zero arguments for construction of ClassDict (for numpy.dtype)
我知道我 return 可能不是正确的类型,但我不知道如何解决它! :)
我觉得你应该先把numpy.sqrt()
的返回值转成python的float类型
def calculate_difference(area, height):
nr = float(np.sqrt(area))
dif = nr - height
return dif
然后注册UDF
calculate_differenceUDF = udf(calculate_difference, FloatType())