Производный столбец в pySpark, используя два столбца и значение предыдущей строки - PullRequest
0 голосов
/ 20 декабря 2018

Я хотел бы создать столбец на моем фрейме данных spark с операциями над двумя столбцами.

Я хочу создать столбец Areas, который рассчитывается по формуле:

( (Pct_Buenos_Acum[i]-Pct_Buenos_Acum[i-1]) * (Pct_Malos_Acum[i]+Pct_Malos_Acum[i-1]) ) / 2

Я пробовал это:

w = Window.rowsBetween(Window.unboundedPreceding, Window.currentRow)

df= df.withColumn('Areas', (( ( col('Pct_Acum_buenos')-col('Pct_Acum_buenos' ) )*(col('Pct_Acum_malos')+col('Pct_Acum_malos')))/2).over(w))

Найти прикрепленный отпечаток того, что у меня до сих пор enter image description here

1 Ответ

0 голосов
/ 20 декабря 2018

Здесь - это способ доступа к предыдущим значениям в pySpark.Продолжая это.

from pyspark.sql import functions as F

# adding indexs column to use in order by
df = df.withColumn('index', F.monotonicallyIncreasingId)

w = Window.partitionBy().orderBy('index')

df = df.withColumn('Areas', (((col('Pct_Acum_buenos')-F.lag(col('Pct_Acum_buenos')).over(w))*(col('Pct_Acum_malos')+F.lag(col('Pct_Acum_malos')).over(w)))/2)
...