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 数据帧并从第一个数据帧中选择所有列,从第二个数据帧中选择几列的主要内容,如果未能解决你的问题,请参考以下文章
python + pyspark:在pyspark中进行多列比较的内部连接错误
pyspark 内连接的替代方法来比较 pyspark 中的两个数据帧