Tenho o dataframe abaixo criado no código PySpark:
+---------------+-------------+---------------+------+
|TransactionDate|AccountNumber|TransactionType|Amount|
+---------------+-------------+---------------+------+
| 2023-01-01| 100| Credit| 1000|
| 2023-01-02| 100| Credit| 1500|
| 2023-01-03| 100| Debit| 1000|
| 2023-01-02| 200| Credit| 3500|
| 2023-01-03| 200| Debit| 2000|
| 2023-01-04| 200| Credit| 3500|
| 2023-01-13| 300| Credit| 4000|
| 2023-01-14| 300| Debit| 4500|
| 2023-01-15| 300| Credit| 5000|
+---------------+-------------+---------------+------+
Preciso imprimir outra coluna como CurrentBalance .
Saída esperada:
+---------------+-------------+---------------+------+--------------+
|TransactionDate|AccountNumber|TransactionType|Amount|CurrentBalance|
+---------------+-------------+---------------+------+--------------+
| 2023-01-01| 100| Credit| 1000| 1000|
| 2023-01-02| 100| Credit| 1500| 2500|
| 2023-01-03| 100| Debit| 1000| 1500|
| 2023-01-02| 200| Credit| 3500| 3500|
| 2023-01-03| 200| Debit| 2000| 1500|
| 2023-01-04| 200| Credit| 3500| 5000|
| 2023-01-13| 300| Credit| 4000| 4000|
| 2023-01-14| 300| Debit| 4500| -500|
| 2023-01-15| 300| Credit| 5000| 1000|
+---------------+-------------+---------------+------+--------------+
Tentei usar a data mínima e passar a data na condição when para calcular o crédito e o débito, mas parece que não está funcionando.
# Find minimum date in TransactionDate column, grouped by AccountNumber column
df_new.groupBy('AccountNumber').agg(f.min('TransactionDate').alias('min_date'))
Você precisará de uma função de janela para isso. Funções de janela fazem cálculos para cada linha em uma partição (grupo). Nesse caso, você precisa somar todos os valores linha após linha.
Além disso, a soma simples não funcionaria, pois você não tem números negativos, então você deve fazê-los usando a entrada da coluna "TransactionType".
Dados de exemplo:
Roteiro: