在两个 Spark 数据框列中查找公共元素的有效方法

Posted

技术标签:

【中文标题】在两个 Spark 数据框列中查找公共元素的有效方法【英文标题】:Efficient approach to find a common element in two spark dataframe columns 【发布时间】:2019-12-24 13:14:58 【问题描述】:

我必须在两个数据框列中找到公共元素的数量。例如

DF1
====
A
B
C
D
E

DF2
====
B
D
F
G
H

结果应该是2,因为有2个共同的元素B和D。

我正在使用 Apache Spark 2.x 并使用以下方法:

prod_list1 = df1.select(col("_c0").collect() 
prod_list2 = df2.select(col("_c0").collect() 
common_elements = set(prod_list1 ).intersection(prod_list2)
num_of_common_elements = len(common_elements)

但是,上述方法并不是一种有效的方法,尤其是。使用“collect()”方法。有没有办法让我们找到号码。不使用“collect()”方法的常见元素?

【问题讨论】:

这个每列?两个 DF 是否具有相同的列? 【参考方案1】:

由于您使用的是 collect 方法,所有其他处理都将在您的驱动程序而不是执行程序中执行。

因此,继续处理而不使用 collect 方法,并对数据帧使用 intersect 方法。

subDf1 = df1.select(col("_c0")
subDf2 = df2.select(col("_c0")
common = subDf1.intersect(subdf2)

现在,获取 common 数据帧的计数。

common.count()

有关 spark 组件的更多信息,请访问 -driver and executors

【讨论】:

非常感谢!有效。但是,我发现使用上述方法后总执行时间显着增加。

以上是关于在两个 Spark 数据框列中查找公共元素的有效方法的主要内容,如果未能解决你的问题,请参考以下文章

查找多个数据框列之间的公共元素

数据框列中的嵌套列表,提取数据框列中列表的值 Pyspark Spark

展平并从 Spark 中的 Struct 类型数据框列中读取值

Pyspark 通过使用另一列中的值替换 Spark 数据框列中的字符串

在熊猫数据框列中查找特定文本

在熊猫数据框列中查找非数字值