我正在尝试检查 spark 数据框(带有列表的列)中的哪些条目包含给定列表中的最大数量的值。
我想到的最佳方法是使用 rdd.foreach() 遍历数据帧,并使用 python 的 set1.intersection(set2)< 将给定列表与每个条目进行比较.
我的问题是 spark 是否有任何内置功能,因此可以避免使用 .foreach 进行迭代?
感谢您的帮助!
附言我的数据框如下所示:
+-------------+---------------------+
| cardnumber|collect_list(article)|
+-------------+---------------------+
|2310000000855| [12480, 49627, 80...|
|2310000008455| [35531, 22564, 15...|
|2310000011462| [117112, 156087, ...|
+-------------+---------------------+
我试图在第二列中找到与给定文章列表交叉点最多的条目,例如 [151574, 87239, 117908, 162475, 48599]
请您参考如下方法:
您可以在数据框中尝试相同的设置操作,而不是使用 rdd.foreach:
from pyspark.sql.functions import udf, li, col
my_udf=udf(lambda A,B: list(set(A).intersection(set(B))))
df=df.withColumn('intersect_value', my_udf('A', 'B'))
您可以使用 len 函数在 UDF 本身中获取相交列表的大小,并从此数据帧执行您想要的操作。
