【发布时间】:2021-07-03 10:47:48
【问题描述】:
给定这个数据框
+--------+------+----------+--------+
|app_id |order |entry_flag|operator|
+--------+------+----------+--------+
|AP-1 |1 |1 |S |
|AP-1 |2 |0 |A |
|AP-2 |3 |0 |S |
|AP-2 |4 |0 |A |
|AP-2 |5 |1 |S |
|AP-2 |6 |0 |S |
|AP-2 |7 |0 |A |
|AP-2 |8 |0 |A |
|AP-2 |9 |1 |A |
|AP-2 |10 |0 |S |
+--------+------+----------+--------+
我要新增一列flag_x,是boolean类型,逻辑是:
按
app_id分区/分组,按order排序,当遇到entry_flag = 1所在的行时,继续前进,找到第一行后有entry_flag = 0 and operator = A的行,标记@ 987654327@,否则flag_x = 0
对于上面的示例,输出应该是:
+--------+------+----------+--------+------+
|app_id |order |entry_flag|operator|flag_x|
+--------+------+----------+--------+------+
|AP-1 |1 |1 |S |0 |
|AP-1 |2 |0 |A |1 |
|AP-2 |3 |0 |S |0 |
|AP-2 |4 |0 |A |0 |
|AP-2 |5 |1 |S |0 |
|AP-2 |6 |0 |S |0 |
|AP-2 |7 |0 |A |1 |
|AP-2 |8 |0 |A |0 |
|AP-2 |9 |1 |A |0 |
|AP-2 |10 |0 |S |0 |
+--------+------+----------+--------+------+
我们如何使用 PySpark 数据帧操作来实现这一点?
【问题讨论】:
标签: apache-spark pyspark apache-spark-sql