从值不同的两个数据框中获取列
Posted
技术标签:
【中文标题】从值不同的两个数据框中获取列【英文标题】:Get columns from two dataframes where values differ 【发布时间】:2020-03-23 05:04:27 【问题描述】:我有两个几乎相同的 Pyspark 数据框:相同的行数和 row_id,相同的架构,但每行的某些列的值不同。
我想确定每一行的那些列。
例子:
数据框 A
id fname lname email
1 Michael Jackson mj@yahoo.com
2 Roger Moore rm@rocketmail.com
3 Angela Merkel am@dw.de
数据框 B
id fname lname email
1 Michael Jordan mj@yahoo.com
2 Gordon Moore rm@rocketmail.com
3 Angela Markle am@dw.com
预期的输出是字典列表:
[
"1": ["lname"],
"2": ["fname"] ,
"3": ["lname", "email"]
]
【问题讨论】:
【参考方案1】:这是一个更通用的答案,使用 RDD 转换:
column_names = a_df.schema.names
def compare(row):
diff_columns = []
for col in column_names:
if row[1][0][col] != row[1][1][col]:
diff_columns.append(col)
return ( row[0], row[0]: diff_columns )
# convert to Pair RDD for joining
a_pair_rdd = a_df.rdd.map(lambda x: (x['id'], x))
b_pair_rdd = b_df.rdd.map(lambda y: (y['id'], y))
joined_rdd = a_pair_rdd.join(b_pair_rdd)
output = joined_rdd.map(compare).map(lambda pair: pair[1]).collect()
【讨论】:
以上是关于从值不同的两个数据框中获取列的主要内容,如果未能解决你的问题,请参考以下文章