выберите и вычислите новый столбец в pyspark для плагина данных - PullRequest
0 голосов
/ 27 июня 2019

У меня есть искровой фрейм с этим форматом:

 opp_id__reference|oplin_status|               stage|      std_amount| std_line_amount|
    +-----------------+------------+--------------------+----------------+----------------+
    |OP-171102-67318|         Won|7 - Deliver & Val...|6243.316662349|6243.31666234948|
    |OP-180910-77114|         Won|7 - Deliver & Val...|5014.57880858921|5014.57880858921|
    |OP-180910-76544|         Pending|7 - Deliver & Val...|5014.57880858921|5014.57880858921|
    |OP-180910-76544|         Pending|7 - Deliver & Val...|5014.57880858921|5614.57880858921|
    |OP-180910-76544|         Won|7 - Deliver & Val...|5014.57880858921|5994.57880858921|

Я хотел бы извлечь список opp_id__reference, в котором сумма записей, которая имеет oplin_status = "В ожидании" больше, чем std_amount

Это привет, который я сделал:

# select opp_line which stage =='7 - Deliver & Validate'  and oplin_status =='Pending'
DF_BR8 = df.filter(df.stage.contains("7 - Deliver")).select('opp_id__reference', 'oplin_status', 'stage', 'std_amount', 'std_line_amount')

DF_BR8_1 = DF_BR8.groupby('opp_id__reference', 'std_amount', 'oplin_status').agg({'std_line_amount': 'sum'}).withColumnRenamed('sum(std_line_amount)','sum_column')

DF_res = DF_BR8_1.filter(DF_BR8_1.oplin_status.contains("Pending"))
DF_res1 =DF_res.filter(DF_res.sum_column <= 0.3*DF_BR8_1.std_amount)

Мой вопрос: правильно ли я? Есть ли другой способ сделать проще?

Спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...