Pyspark:内部连接两个 pyspark 数据帧并从第一个数据帧中选择所有列,从第二个数据帧中选择几列

Posted

技术标签:

【中文标题】Pyspark:内部连接两个 pyspark 数据帧并从第一个数据帧中选择所有列,从第二个数据帧中选择几列【英文标题】:Pyspark : Inner join two pyspark dataframes and select all columns from first dataframe and few columns from second dataframe 【发布时间】:2020-08-23 05:50:53 【问题描述】:

我有两个 pyspark 数据帧 A 和 B。我想内部连接两个 pyspark 数据帧并选择第一个数据帧中的所有列和第二个数据帧中的几列。

A_df                
id  column1 column2 column3 column4
1   A1  A2  A3  A4
2   A1  A2  A3  A4
3   A1  A2  A3  A4
4   A1  A2  A3  A4
B_df                        
id  column1 column2 column3 column4 column5 column6
1   B1  B2  B3  B4  B5  B6
2   B1  B2  B3  B4  B5  B6
3   B1  B2  B3  B4  B5  B6
4   B1  B2  B3  B4  B5  B6
joined_df                       
id  column1 column2 column3 column4 column5 column6
1   A1  A2  A3  A4  B5  B6
2   A1  A2  A3  A4  B5  B6
3   A1  A2  A3  A4  B5  B6
4   A1  A2  A3  A4  B5  B6

我正在尝试下面的代码 -

joined_df = (A_df.alias('A_df').join(B_df.alias('B_df'),
                               on = A_df['id'] == B_df['id'],
                               how = 'inner')
                               .select('A_df.*',B_df.column5,B_df.column6))

但它在交换列中的值时给出了一个奇怪的结果。我怎样才能实现它?提前致谢

【问题讨论】:

.select('A_df.*', 'B_df.column5', 'B_df.column6')) 它给出了同样的问题。值在列之间混合 如果两个表中的列名相同,则它变得不明确。重命名表之一中的列并执行此操作。它会起作用的。 【参考方案1】:

有什么问题?一切正常。

df1 = spark.read.option("header","true").option("inferSchema","true").csv("test1.csv")
df2 = spark.read.option("header","true").option("inferSchema","true").csv("test2.csv")

df1.alias('a').join(df2.alias('b'), ['id'], 'inner') \
   .select('a.*', 'b.column5', 'b.column6').show()

+---+-------+-------+-------+-------+-------+-------+
| id|column1|column2|column3|column4|column5|column6|
+---+-------+-------+-------+-------+-------+-------+
|  1|     A1|     A2|     A3|     A4|     B5|     B6|
|  2|     A1|     A2|     A3|     A4|     B5|     B6|
|  3|     A1|     A2|     A3|     A4|     B5|     B6|
|  4|     A1|     A2|     A3|     A4|     B5|     B6|
+---+-------+-------+-------+-------+-------+-------+

【讨论】:

以上是关于Pyspark:内部连接两个 pyspark 数据帧并从第一个数据帧中选择所有列,从第二个数据帧中选择几列的主要内容,如果未能解决你的问题,请参考以下文章

pyspark中的内部连接

python + pyspark:在pyspark中进行多列比较的内部连接错误

pyspark 内连接的替代方法来比较 pyspark 中的两个数据帧

如何通过不同级别的枢轴聚合然后在pyspark中进行内部连接?

在 PySpark 中连接两个数据框时避免列重复列名

pyspark 数据帧中的完全外连接