使用 pyspark 连接两个数据框时合并相似的列名
Merging the similar column names while joining two dataframes using pyspark
在下面的程序中,在 pyspark 中连接两个数据帧时创建了重复的列。
>>> spark = SparkSession.builder.appName("Join").getOrCreate()
>>> dict=[{"Emp_id" : 123 , "Emp_name" : "Raja" }, {"Emp_id" : 456 , "Emp_name" : "Ravi"}]
>>> dict1=[{"Emp_id" : 123 , "Dep_name" : "Computer" } , {"Emp_id" : 456 ,"Dep_name" :"Economy"}]
>>> df=spark.createDataFrame(dict)
>>> df1=spark.createDataFrame(dict1)
>>> df2=df.join(df1,df.Emp_id == df1.Emp_id, how = 'inner')
>>> df.show()
+------+--------+
|Emp_id|Emp_name|
+------+--------+
| 123| Raja|
| 456| Ravi|
+------+--------+
>>> df1.show()
+--------+------+
|Dep_name|Emp_id|
+--------+------+
|Computer| 123|
| Economy| 456|
+--------+------+
>>> df2=df.join(df1,df.Emp_id == df1.Emp_id, how = 'inner')
>>> df2.show()
+------+--------+--------+------+
|Emp_id|Emp_name|Dep_name|Emp_id|
+------+--------+--------+------+
| 123| Raja|Computer| 123|
| 456| Ravi| Economy| 456|
+------+--------+--------+------+
是否有任何其他方法可以像在 SAS 中一样通过覆盖列连接来获取如下数据?
+------+--------+--------+
|Emp_id|Emp_name|Dep_name|
+------+--------+--------+
| 123| Raja|Computer|
| 456| Ravi| Economy|
+------+--------+--------+
在您的加入条件中 将 df.Emp_id == df1.Emp_id
替换为 ['Emp_id']
df2=df.join(df1,['Emp_id'], how = 'inner')
df2.show()
#+------+--------+--------+
#|Emp_id|Emp_name|Dep_name|
#+------+--------+--------+
#| 123| Raja|Computer|
#| 456| Ravi| Economy|
#+------+--------+--------+
在同一列上连接两个数据帧时,明确指定要在 'on' 闭包中应用连接的连接列。
df2=df.join(df1, on='Emp_id' how = 'inner')
df2.show()
#+------+--------+--------+
#|Emp_id|Emp_name|Dep_name|
#+------+--------+--------+
#| 123| Raja|Computer|
#| 456| Ravi| Economy|
#+------+--------+--------+
在下面的程序中,在 pyspark 中连接两个数据帧时创建了重复的列。
>>> spark = SparkSession.builder.appName("Join").getOrCreate()
>>> dict=[{"Emp_id" : 123 , "Emp_name" : "Raja" }, {"Emp_id" : 456 , "Emp_name" : "Ravi"}]
>>> dict1=[{"Emp_id" : 123 , "Dep_name" : "Computer" } , {"Emp_id" : 456 ,"Dep_name" :"Economy"}]
>>> df=spark.createDataFrame(dict)
>>> df1=spark.createDataFrame(dict1)
>>> df2=df.join(df1,df.Emp_id == df1.Emp_id, how = 'inner')
>>> df.show()
+------+--------+
|Emp_id|Emp_name|
+------+--------+
| 123| Raja|
| 456| Ravi|
+------+--------+
>>> df1.show()
+--------+------+
|Dep_name|Emp_id|
+--------+------+
|Computer| 123|
| Economy| 456|
+--------+------+
>>> df2=df.join(df1,df.Emp_id == df1.Emp_id, how = 'inner')
>>> df2.show()
+------+--------+--------+------+
|Emp_id|Emp_name|Dep_name|Emp_id|
+------+--------+--------+------+
| 123| Raja|Computer| 123|
| 456| Ravi| Economy| 456|
+------+--------+--------+------+
是否有任何其他方法可以像在 SAS 中一样通过覆盖列连接来获取如下数据?
+------+--------+--------+
|Emp_id|Emp_name|Dep_name|
+------+--------+--------+
| 123| Raja|Computer|
| 456| Ravi| Economy|
+------+--------+--------+
在您的加入条件中 将 df.Emp_id == df1.Emp_id
替换为 ['Emp_id']
df2=df.join(df1,['Emp_id'], how = 'inner')
df2.show()
#+------+--------+--------+
#|Emp_id|Emp_name|Dep_name|
#+------+--------+--------+
#| 123| Raja|Computer|
#| 456| Ravi| Economy|
#+------+--------+--------+
在同一列上连接两个数据帧时,明确指定要在 'on' 闭包中应用连接的连接列。
df2=df.join(df1, on='Emp_id' how = 'inner')
df2.show()
#+------+--------+--------+
#|Emp_id|Emp_name|Dep_name|
#+------+--------+--------+
#| 123| Raja|Computer|
#| 456| Ravi| Economy|
#+------+--------+--------+