【发布时间】:2020-10-06 21:13:27
【问题描述】:
我很难编写我的 spark scala 代码来使用带条件的自联接来填充覆盖范围为空的行。
这是数据:
+----+--------------+----------+--------+
| ID | date_in_days | coverage | values |
+----+--------------+----------+--------+
| 1 | 2020-09-01 | | 0.128 |
| 1 | 2020-09-03 | 0 | 0.358 |
| 1 | 2020-09-04 | 0 | 0.035 |
| 1 | 2020-09-05 | | |
| 1 | 2020-09-06 | | |
| 1 | 2020-09-19 | | |
| 1 | 2020-09-12 | | |
| 1 | 2020-09-18 | | |
| 1 | 2020-09-11 | | |
| 1 | 2020-09-16 | | |
| 1 | 2020-09-21 | 13 | 0.554 |
| 1 | 2020-09-23 | | |
| 1 | 2020-09-30 | | |
+----+--------------+----------+--------+
预期结果:
+----+--------------+----------+--------+
| ID | date_in_day | coverage | values |
+----+--------------+----------+--------+
| 1 | 2020-09-01 | -1 | 0.128 |
| 1 | 2020-09-03 | 0 | 0.358 |
| 1 | 2020-09-04 | 0 | 0.035 |
| 1 | 2020-09-05 | 0 | |
| 1 | 2020-09-06 | 0 | |
| 1 | 2020-09-19 | 0 | |
| 1 | 2020-09-12 | 0 | |
| 1 | 2020-09-18 | 0 | |
| 1 | 2020-09-11 | 0 | |
| 1 | 2020-09-16 | 0 | |
| 1 | 2020-09-21 | 13 | 0.554 |
| 1 | 2020-09-23 | -1 | |
| 1 | 2020-09-30 | -1 | |
我想做什么:
对于按日期排序的每个不同 ID(按 ID 分区的数据框)
用例:行覆盖列为空,我们称之为rowEmptycoverage:
- 在 DF 中查找带有
date_in_days > rowEmptycoverage.date_in_days和coverage >= 0的第一行。我们就叫它rowFirstDateGreater - 如果
rowFirstDateGreater.values > 500设置rowEmptycoverage.coverage为0。否则设置为-1。
当我加入 where 时,我有点迷失在混合中......
【问题讨论】:
-
你能把逻辑解释清楚一点吗?欢迎提供说明所有案例的示例。
-
是的,不清楚,我试图重新描述让我知道 :)
标签: scala apache-spark