我必须确定数据如何变化。我有一个包含ID列的60列的配置单元表。我们将更改记录在审核表中。
样本数据集
日期ID值1值2 2018年12月20日100 F A 2018年12月22日100 B A 12/25/2018 100 C B
我想看到这样的更改历史记录
12/22/2018 100 F-> B空 12/25 / 20-18 100 B-> C A-> B
注意:我想动态比较所有列
我使用spark sql创建了一个数据框。
from pyspark import SparkContext
from pyspark.sql import SQLContext
from pyspark.sql import functions as F
from pyspark.sql.window import Window
upd_cbe=spark.sql("select *,row_number() over (partition by id order by
load_date desc) rownum from Event_audit where id in (select id from
Event_audit where _date > '2018-11-01' group by id having
count(*)>1) order by id desc")
my_window = Window.partitionBy("id").orderBy("rownum")
diff_cbe = upd_cbe
for col_name in diff_cbe.columns:
diff_cbe = diff_cbe.select('*',F.when(F.isnull(F.lit(col_name)F.lag(F.lit(col_name)).over(my_window)),0).otherwise(F.lag(F.lit(col_name)).over(my_window) +'->'+F.lit(col_name)).alias('diff_'+col_name))
diff_cbe.show()