我在寻找这个问题的答案时遇到了一些麻烦,所以我想知道是否有人可以帮助我。
这是一些上下文:
我有两个数据框 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)
这两个表达式是否解析为相同的执行计划?或者其中一个比另一个更省时?
谢谢你。