Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
pyspark中左侧外部联接后Drop函数不工作_Pyspark_Apache Spark Sql_Pyspark Sql - Fatal编程技术网

pyspark中左侧外部联接后Drop函数不工作

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, (

我的pyspark版本是2.1.1。我正在尝试连接两个数据帧(左外),这两个数据帧有两列idpriority。我创建的数据帧如下所示:

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列会被删除。也有了内部连接,我可以放下任何东西。