【问题标题】:Efficient approach to find a common element in two spark dataframe columns在两个 Spark 数据框列中查找公共元素的有效方法
【发布时间】: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 是否具有相同的列?

标签: apache-spark-2.0


【解决方案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

【讨论】:

  • 非常感谢!有效。但是,我发现使用上述方法后总执行时间显着增加。
猜你喜欢
  • 2018-03-15
  • 1970-01-01
  • 1970-01-01
  • 2015-07-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-15
  • 1970-01-01
相关资源
最近更新 更多