Skip to main content
 首页 » 编程设计

python之PySpark之将单个整数列表与列表列进行比较

2024年09月07日36sky-heaven

我正在尝试检查 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 本身中获取相交列表的大小,并从此数据帧执行您想要的操作。