gpt4 book ai didi

arrays - Spark 错误 :expected zero arguments for construction of ClassDict (for numpy. core.multiarray._reconstruct)

转载 作者:行者123 更新时间:2023-12-03 08:48:02 49 4
gpt4 key购买 nike

我在 Spark 中有一个数据框,其中一列包含一个数组。现在,我编写了一个单独的 UDF,它将数组转换为另一个数组,其中只有不同的值。请参见下面的示例:

例如: [24,23,27,23] 应该转换为 [24, 23, 27]
代码:

def uniq_array(col_array):
x = np.unique(col_array)
return x
uniq_array_udf = udf(uniq_array,ArrayType(IntegerType()))

Df3 = Df2.withColumn("age_array_unique",uniq_array_udf(Df2.age_array))

在上面的代码中, Df2.age_array是我在其上应用 UDF 以获得不同列的数组 "age_array_unique"它应该只包含数组中的唯一值。

但是,只要我运行命令 Df3.show() ,我得到错误:

net.razorvine.pickle.PickleException: expected zero arguments for construction of ClassDict (for numpy.core.multiarray._reconstruct)



谁能让我知道为什么会这样?

谢谢!

最佳答案

问题的根源在于从 UDF 返回的对象不符合声明的类型。 np.unique不仅返回numpy.ndarray但也将数字转换为相应的NumPy类型 which are not compatibleDataFrame API。你可以尝试这样的事情:

udf(lambda x: list(set(x)), ArrayType(IntegerType()))

或者这个(保持秩序)
udf(lambda xs: list(OrderedDict((x, None) for x in xs)), 
ArrayType(IntegerType()))

反而。

如果你真的想要 np.unique你必须转换输出:
udf(lambda x: np.unique(x).tolist(), ArrayType(IntegerType()))

关于arrays - Spark 错误 :expected zero arguments for construction of ClassDict (for numpy. core.multiarray._reconstruct),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38984775/

49 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com