- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我有一个数据框
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)
我做错了什么?
最佳答案
检查cosine
的返回类型,错误原因就很清楚了:
type(cosine([1, 2], [1, 3]))
# numpy.float64
但是,np.float64
是float
的子类:
issubclass(np.float64, float)
# True
所以,对你的函数做一个小改动,
def cosine_distance(a, b):
try:
return float(cosine(a, b)) # cosine(a, b).item()
except Exception as e:
return 0.0 # in case division by zero
这会起作用
df.withColumn('cosine_distance', cosine_distance_udf('col_1', 'col_2')).show()
+------+------+---------------+
| col_1| col_2|cosine_distance|
+------+------+---------------+
|[1, 2]|[3, 4]| 0.01613009|
|[2, 1]|[3, 4]| 0.10557281|
+------+------+---------------+
关于python - 调用返回 FloatType() 的 UDF 时为 "expected zero arguments for construction of ClassDict (for numpy.dtype)",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53800062/
我正在努力创建 LDA 模型。 这是我到目前为止所做的 - 创建一个 unigram 并将数据帧转换为基于 this post 的 RDD . 代码如下: countVectors = CountVe
我正在努力创建 LDA 模型。 这是我到目前为止所做的 - 创建一个 unigram 并将数据帧转换为基于 this post 的 RDD . 代码如下: countVectors = CountVe
这个问题针对熟悉 py4j 的人 - 可以帮助解决 pickling 错误。我正在尝试向 pyspark PythonMLLibAPI 添加一个方法,该方法接受 namedtuple 的 RDD,做一
我得到错误 expected zero arguments for construction of ClassDict (for pyspark.mllib.linalg.DenseVector) 通
我在 Spark 中有一个数据框,其中一列包含一个数组。现在,我编写了一个单独的 UDF,它将数组转换为另一个数组,其中只有不同的值。请参见下面的示例: 例如: [24,23,27,23] 应该转换为
我在训练 LR 模型时使用 sklearn2pmml.preprocessing.CutTransformer 和 sklearn.preprocessing.LabelEncoder 对目标进行编码
我相信它与这个有关:Spark Error:expected zero arguments for construction of ClassDict (for numpy.core.multiarr
我是一名优秀的程序员,十分优秀!