我试图在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
答案 0 :(得分:0)
安东尼,
您可以尝试执行以下联接:
val joineddf = finaldf.join(cosmos.select("BatchKey"), Seq("BatchKey"), "left_outer")
这里我没有使用任何别名。