Фрейм данных pyspark сравнивает значения нескольких столбцов в строках на основе ключа - PullRequest
0 голосов
/ 21 декабря 2018

Я должен определить, как меняются данные.У меня есть таблица улья с 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

  1. Разделениеданные по порядку идентификатора по rownum
  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()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...