pyspark数据框基于键比较行中多个列的值

时间:2018-12-21 18:09:01

标签: dataframe pyspark compare

我必须确定数据如何变化。我有一个包含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

  1. 按id按行编号对数据进行分区
  2. 将每一列与下一列进行比较,并记录更改,例如  A-> B ---> C (值从A更改为B,然后更改为C)

注意:我想动态比较所有列

我使用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()

0 个答案:

没有答案