Pyspark SparkSQL:外连接问题

时间:2015-11-24 23:35:11

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

我正在使用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)]
你能帮我理解为什么吗? 非常感谢!

1 个答案:

答案 0 :(得分:3)

正如官方documentation所述:

  

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

     

列必须存在于两侧,执行内部等连接