Я должен определить, как меняются данные.У меня есть таблица улья с 60 столбцами, включая столбец ID.Мы фиксируем изменения в таблице аудита.
Образец набора данных
идентификатор даты значение1 значение2 20.12.2008 100 FA 12/22/2018 100 BA 12/25/2018 100 CB
Я хочу увидетьистория изменений вот так
12/22/2018 100 F -> B NULL 12/25 / 20-18 100 B -> C A -> B
- Разделениеданные по порядку идентификатора по rownum
- сравнивают каждый столбец со следующим и записывают изменение как 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()