Python Pyspark SparkSQL:外部联接问题

Python Pyspark SparkSQL:外部联接问题,python,apache-spark,apache-spark-sql,pyspark,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', 'va

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

正如官方声明所述:

如果
on
是一个字符串或一组字符串,指示联接列的名称

列的两侧必须存在,这将执行内部等联接