我试图按记录比较两个非常大的CSV记录,并且我需要生成一个摘要矩阵以显示同一记录id的每个字段是否更改。 我的数据如下所示:
record_id, colA, colB ....file
10086 , 'haha', 'ok' ....'csv1'
10086 , 'haha', 'oh no' ....'csv2'
10087, 'ok', 'good' ........'csv1'
10087, 'ok', 'good' ........'csv2’
我需要获取一个如下所示的数据框:
record_id, colA, colB ....file
10086 , 1, 0 ….0
10087, 1, 1 ……..0
这个想法是,我想将两个csv加载到数据帧中,创建并集并获取df_both,其中包含来自两个csvs的记录的双重条目。现在我只需要打电话
df_both.groupBy("record_id").agg(string_comparison('colA'), string_comparison('colB') ...).show()
生成布尔矩阵。
我只需要弄清楚如何编写string_comparison聚合函数,该函数通过每个字段检查具有相同record_id的两行,然后返回类似“ record_id,0、1、0、1 ...”的行。 / p>
使用RDD可以做到这一点,但是带有spark数据框的python的速度比RDD快,有什么办法可以实现吗?谢谢!
答案 0 :(得分:0)
首先,您需要重命名列,以便在执行连接后可以区分它们。 第一次加入后,我希望得到这样的输出
record_id COLA COLB colA colB
10086 haha ok haha oh no
10087 ok good ok good
然后您可以比较两列并获得所需的输出。
@udf
def compareCols(col1,col2):
if col1==col2:
return 1
else:
return 0
outputDF = AboveDF.withColum('compareA', compareCols(col('COLA'),col('colA'))\
.withColum('compareB', compareCols(col('COLB'),col('colB'))