pyspark中左侧外部联接后Drop函数不工作
我的pyspark版本是2.1.1。我正在尝试连接两个数据帧(左外),这两个数据帧有两列id和priority。我创建的数据帧如下所示:pyspark中左侧外部联接后Drop函数不工作,pyspark,apache-spark-sql,pyspark-sql,Pyspark,Apache Spark Sql,Pyspark Sql,我的pyspark版本是2.1.1。我正在尝试连接两个数据帧(左外),这两个数据帧有两列id和priority。我创建的数据帧如下所示: a = "select 123 as id, 1 as priority" a_df = spark.sql(a) b = "select 123 as id, 1 as priority union select 112 as uid, 1 as priority" b_df = spark.sql(b) c_df = a_df.join(b_df, (
a = "select 123 as id, 1 as priority"
a_df = spark.sql(a)
b = "select 123 as id, 1 as priority union select 112 as uid, 1 as priority"
b_df = spark.sql(b)
c_df = a_df.join(b_df, (a_df.id==b_df.id), 'left').drop(b_df.priority)
c\u df模式将作为DataFrame[uid:int,priority:int,uid:int,priority:int]
drop函数没有删除列
但如果我尝试这样做:
c_df = a_df.join(b_df, (a_df.id==b_df.id), 'left').drop(a_df.priority)
然后,一个_df的优先级列被删除
不确定是否存在版本更改问题或其他问题,但drop函数的行为会像这样让人感觉很奇怪
我知道解决方法可以是先删除不需要的列,然后进行连接。但仍然不确定为什么drop函数不起作用
提前感谢。在pyspark中使用连接重复列名会导致不可预知的行为,我已经阅读了在连接之前消除名称歧义的方法。从stackoverflow和。很抱歉,我不明白为什么pyspark不能像你描述的那样工作 但databricks文档解决了这个问题: 从数据库中: 如果您在Spark中执行联接,并且没有正确指定联接,那么最终将得到重复的列名。这使得选择这些列变得更加困难。本主题和笔记本演示如何执行联接,以避免重复列 当您加入时,您可以尝试使用
别名
(这是我通常使用的),也可以将列作为列表
类型或str
加入
df = left.join(right, ["priority"])
同意别名(或者删除不相关的列也可以),但我仍然很困惑,为什么右侧的df列不会被删除,而左侧的df列会被删除。也有了内部连接,我可以放下任何东西。