1

我有一个列表 minhash_sig = ['112', '223'],我想找到这个列表和 pyspark 数据框列中每个元素之间的 jaccard 相似性。不幸的是,我不能这样做。

我尝试使用 array_intersect 以及 array_union 来尝试进行比较。但是,当我收到消息时,这不起作用Resolved attribute missing

这是我到目前为止创建的 pyspark 数据框。

df = spark.createDataFrame(
    [
        (1, ['112','333']), 
        (2, ['112','223'])
    ],
    ["id", "minhash"]  # add your column names here
)
minhash_sig = ['112', '223']
df2 = spark.createDataFrame([Row(c1=minhash_sig)])

这是我用来尝试将列表与 pyspark 列元素进行比较的代码。

df.withColumn('minhash_sim',size(array_intersect(df2.c1, df.minhash)))

有谁知道我如何在没有此错误的情况下进行此比较?

4

1 回答 1

1

df2 中的列将不为 df1 所知,除非您加入它们并创建一个对象,您可以尝试先将两者交叉加入,然后尝试您的代码:

df.crossJoin(df2).withColumn('minhash_sim',size(array_intersect("c1", "minhash")))\
  .show()

+---+----------+----------+-----------+
| id|   minhash|        c1|minhash_sim|
+---+----------+----------+-----------+
|  1|[112, 333]|[112, 223]|          1|
|  2|[112, 223]|[112, 223]|          2|
+---+----------+----------+-----------+
于 2021-08-28T16:21:26.347 回答