Scala左联接返回完全联接的结果

时间:2019-12-13 11:34:47

标签: scala dataframe apache-spark apache-spark-sql

我试图在Spark Shell中加入两个数据框。 一个数据帧具有15000条记录,另一个数据帧具有14000行。 我尝试了这些数据帧的左外部联接和内部联接,但结果是计数为29000行。 这是怎么回事? 我尝试过的代码如下。

val joineddf = finaldf.as("df1").join(cosmos.as("df2"), $"df1.BatchKey" === $"df2.BatchKey", "left_outer").select(($"df1.*"),col("df2.BatchKey").as("B2"))
val joineddf = finaldf.as("df1").join(cosmos.as("df2"), $"df1.BatchKey" === $"df2.BatchKey", "inner").select(($"df1.*"),col("df2.BatchKey").as("B2"))

以上两种方法都将导致一个数据帧,其中count是两个数据帧的总和。

即使我尝试了以下方法,但仍然得到相同的结果。

finaldf.createOrReplaceTempView("df1")
cosmos.createOrReplaceTempView("df2")
val test = spark.sql("""SELECT df1.*, df2.* FROM  df1 LEFT OUTER JOIN  df2 ON trim(df1.BatchKey) == trim(df2.BatchKey)""")

如果我尝试为加入添加更多条件,则计数的数量再次增加。

如何获得左外部连接的精确结果? 在这种情况下,最大数量应为15000

1 个答案:

答案 0 :(得分:0)

安东尼,

您可以尝试执行以下联接:

val joineddf = finaldf.join(cosmos.select("BatchKey"), Seq("BatchKey"), "left_outer")

这里我没有使用任何别名。