将列表与 pyspark 列中的每个元素进行比较

Compare list to every element in a pyspark column

我有一个列表 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)))

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

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|
+---+----------+----------+-----------+