【问题标题】:Pyspark SparkSQL: issue with outer joinPyspark SparkSQL:外连接问题
【发布时间】:2015-11-24 23:35:10
【问题描述】:

我正在使用 pyspark,但外部连接存在这个问题。基本上,如果我将列名列表用作“ON”条件,则连接的结果是内连接,无论我是否指定了“outer_left”选项。如果我指定完全相等(即 df1.id == df2.id)而不是列名列表,问题就会消失。

换句话说:

testDf = sc.parallelize([['a', 1], ['b', 1]]).toDF(['id', 'val1'])
testDf2 = sc.parallelize([['a', 2]]).toDF(['id', 'val2'])
cond = [testDf.id == testDf2.id]
testDf.join(testDf2, cond, how='left_outer').collect()

将返回右左外连接:

[Row(id=u'a', val1=1, id=u'a', val2=2),Row(id=u'b', val1=1, id=None, val2=None)]

但如果我使用

testDf.join(testDf2, 'id', how='left_outer').collect()

它将返回一个内部连接

[Row(id=u'a', val1=1, val2=2)]

你能帮我理解为什么吗? 非常感谢!

【问题讨论】:

    标签: python apache-spark apache-spark-sql pyspark


    【解决方案1】:

    正如官方documentation所说:

    如果on 是一个字符串或一个字符串列表,表示连接列的名称,

    列必须存在于两边,并且这会执行内部等值连接

    【讨论】:

      猜你喜欢
      • 2017-12-06
      • 1970-01-01
      • 2017-10-27
      • 2020-08-20
      • 2015-05-14
      • 2021-01-31
      • 2021-03-22
      • 2021-11-06
      • 1970-01-01
      相关资源
      最近更新 更多