накопительный продукт в фрейме данных PySpark - PullRequest
0 голосов
/ 03 мая 2019

Я пытаюсь создать некоторый накопительный продукт в следующем фрейме данных

||b |

1 1
1 2
1 3

1 4
Я хочу, чтобы другой столбец с именем "c" содержал кумулятивное произведение "b" за "a "и фрейм данных результата показывает как

||б |c |

1 1 1

1 2 2

1 3 6

1 4 24

у любого есть решение, пожалуйста, отмените

Ответы [ 2 ]

1 голос
/ 03 мая 2019

Вы должны установить столбец заказа. В вашем случае я использовал столбец 'b'

from pyspark.sql import functions as F, Window, types
from functools import reduce
from operator import mul

df = spark.createDataFrame([(1, 1), (1, 2), (1, 3), (1, 4), (1, 5)], ['a', 'b'])

order_column = 'b'

window = Window.orderBy(order_column)

expr = F.col('a') * F.col('b')

mul_udf = F.udf(lambda x: reduce(mul, x), types.IntegerType())

df = df.withColumn('c', mul_udf(F.collect_list(expr).over(window)))

df.show()

+---+---+---+
|  a|  b|  c|
+---+---+---+
|  1|  1|  1|
|  1|  2|  2|
|  1|  3|  6|
|  1|  4| 24|
|  1|  5|120|
+---+---+---+
0 голосов
/ 03 мая 2019

Вы отвечаете, что-то похожее на это.

import pandas as pd
df = pd.DataFrame({'v':[1,2,3,4,5,6]})
df['prod'] = df.v.cumprod()
   v   prod
0  1     1
1  2     2
2  3     6
3  4    24
4  5   120
5  6   720
...