python - 带有 MLLIB 的 pyspark 数据帧中的点积
问题描述
我在 pyspark 中有一个非常简单的数据框,如下所示:
from pyspark.sql import Row
from pyspark.mllib.linalg import DenseVector
row = Row("a", "b")
df = spark.sparkContext.parallelize([
offer_row(DenseVector([1, 1, 1]), DenseVector([1, 0, 0])),
]).toDF()
我想计算这些向量的点积而不求助于 UDF 调用。
spark MLLIB文档引用了一个dot
方法,DenseVectors
但如果我尝试按如下方式应用它:
df_offers = df_offers.withColumn("c", col("a").dot(col("b")))
我收到如下错误:
TypeError: 'Column' object is not callable
有谁知道这些 mllib 方法是否可以在 DataFrame 对象上调用?
解决方案
在这里,您将dot
方法应用于列而不是 a DenseVector
,这确实不起作用:
df_offers = df_offers.withColumn("c", col("a").dot(col("b")))
您将不得不使用 udf :
from pyspark.sql.functions import udf, array
from pyspark.sql.types import DoubleType
def dot_fun(array):
return array[0].dot(array[1])
dot_udf = udf(dot_fun, DoubleType())
df_offers = df_offers.withColumn("c", dot_udf(array('a', 'b')))
推荐阅读
- c++ - 当宽度不是 4 的倍数时,glReadPixels 会导致堆栈粉碎
- html - 当我更改窗口宽度大小时,为什么我的页脚会跳到页面中心?
- django - 带有 LinkColumn 的单元格中的多个链接 - Django-table2
- scala - Scala 的解析器组合器在解析之前进行比较
- python - 从 pandas DataFrame 中选择行的问题
- json - Nifi中的JSON数组
- reactjs - 使用 p5js 观看和移动 midi 音符并做出反应
- android - 为什么要在 Android 中编写自定义记录器
- python-2.7 - 迭代 S3 文件夹以根据“last_modified_date”获取最近的文件
- php - Laravel SMTP - fwrite(): SSL: 操作成功完成