我有两个几乎完全相同的Pyspark数据框:相同的行数和row_id,相同的架构,但每一行的某些列上的值不同。
我想确定每行的列是什么。
例:
数据框A
id fname lname email
1 Michael Jackson [email protected]
2 Roger Moore [email protected]
3 Angela Merkel [email protected]
数据框B
id fname lname email
1 Michael Jordan [email protected]
2 Gordon Moore [email protected]
3 Angela Markle [email protected]
预期的输出是字典列表:
[
{"1": ["lname"]},
{"2": ["fname"] },
{"3": ["lname", "email"] }
]
这是使用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()
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句