小编Vib*_*sit的帖子

Spark 数据帧:在加入期间或之后进行过滤是否更有效?

我在寻找这个问题的答案时遇到了一些麻烦,所以我想知道是否有人可以帮助我。

这是一些上下文:

我有两个数据框 df1 和 df2 :

val df1: DataFrame = List((1, 2, 3), (2, 3, 3)).toDF("col1", "col2", "col3")
val df2: DataFrame = List((1, 5, 6), (1, 2, 5)).toDF("col1", "col2_bis", "col3_bis")
Run Code Online (Sandbox Code Playgroud)

我想做的是

在“col1”上加入这些数据帧 df1 和 df2,但只保留 df1("col2") < df2("col2_bis") 的行

所以我的问题是,这样做是否更有效:

df1.join(df2, df1("col1") === df2("col1") and df1("col2") < df2("col2_bis"), "inner")
Run Code Online (Sandbox Code Playgroud)

或者像这样:

df1.join(df2, Seq("col1"), "inner").filter(col("col2") < col("col2_bis"))
Run Code Online (Sandbox Code Playgroud)

结果是:

Array(Row(1, 2, 3, 5, 6)) with columns ("col1", "col2", "col2_bis", "col3", "col3_bis")
Run Code Online (Sandbox Code Playgroud)

这两个表达式是否解析为相同的执行计划?或者其中一个比另一个更省时?

谢谢你。

join dataframe apache-spark apache-spark-sql

3
推荐指数
1
解决办法
4556
查看次数

标签 统计

apache-spark ×1

apache-spark-sql ×1

dataframe ×1

join ×1