将列表与 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|
+---+----------+----------+-----------+
我有一个列表 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|
+---+----------+----------+-----------+