【发布时间】:2019-05-16 22:12:04
【问题描述】:
我有一个数据框
id col_1 col_2
1 [1,2] [1,3]
2 [2,1] [3,4]
我想在col_1 和col_2 之间创建另一列cosine。
from scipy.spatial.distance import cosine
def cosine_distance(a,b):
try:
return cosine(a, b)
except Exception as e:
return 0.0 # in case division by zero
我定义了一个udf:
cosine_distance_udf = udf (cosine_distance, FloatType())
最后:
new_df = df.withColumn('cosine_distance', cosine_distance_udf('col_1', 'col_2'))
我有错误:PickleException: expected zero arguments for construction of ClassDict (for numpy.dtype)
我做错了什么?
【问题讨论】:
-
如果你这样做
return float(cosine(a, b))怎么办? -
@coldspeed 难以置信,它运作良好。非常感谢。
-
我写了一个例子并解释了原因。此外,这可能是重复的,但我认为它不是那个特定问题的重复,@ArnonRotem-Gal-Oz
-
@coldspeed 看来你是对的 - 我删除了近距离投票
标签: python dataframe pyspark pyspark-sql