pyspark - 在连接数据框结果中显示用作键连接的两列
问题描述
我有以下简单的加入:
df_join = (df1.join(df2, on=['key'], how='left').select(df1['key'], df2['key']))
它返回以下错误Attribute(s) with the same name appear in the operation
我知道我不能显示两个具有相同名称的列,但在这种情况下我会这样做。
解决方案
您可以为其中任何一个指定别名
df_join = df1.join(df2, on=['key'], how='left')\
.select(
df1['key'], df2['key'].alias('right_key')
)
例子 -
input_str1 = """
|a|100
|b|100
|c|100
""".split("|")
input_values1 = list(map(lambda x:x.strip(),input_str1))[1:]
input_list1 = [(x,y) for x,y in zip(input_values1[0::2],input_values1[1::2])]
sparkDF1 = sql.createDataFrame(input_list1,['id','value'])
input_str2 = """
|a|20 |2020-01-02 01:30
|a|50 |2020-01-02 05:30
|b|50 |2020-01-15 07:30
|b|80 |2020-02-01 09:30
|c|50 |2020-02-01 09:30
""".split("|")
input_values2 = list(map(lambda x:x.strip(),input_str2))[1:]
input_list2 = [(x,y,z) for x,y,z in zip(input_values2[0::3],input_values2[1::3],input_values2[2::3])]
sparkDF2 = sql.createDataFrame(input_list2,['id','value','timestamp'])
finalDF = (sparkDF1.join(sparkDF2
,sparkDF1['id'] == sparkDF2['id']
,'inner'
).select(sparkDF2["*"],sparkDF2['id'].alias('id_right')))
finalDF.show()
+---+-----+--------+
| id|value|id_right|
+---+-----+--------+
| c| 100| c|
| b| 100| b|
| b| 100| b|
| a| 100| a|
| a| 100| a|
+---+-----+--------+
推荐阅读
- python-3.x - 如何自动创建变量并从文件中的一行分配值
- html - 由于引导程序,CSS样式没有出现?
- android - Ionic 4 Google 登录方法返回错误 12500
- c# - 将 LINQ 与 Select 和 Distinct 方法一起使用
- angular - 角度 7 中的 Http POST 请求后响应为空
- excel - 使用宏创建数据透视表时出错
- dart - Flutter - 手动触发 StreamSubscription onData
- angular - 如何在 ngx-formly 中修复标签上的布局复选框?
- android - 如何关闭包括片段在内的第二个活动?
- java - REST ASSURED (JAVA):提取 json 对象值给定它的父对象值