在两个 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 类型数据框列中读取值