【发布时间】:2018-07-16 07:28:48
【问题描述】:
我有一个像这样的数据框:
+---------------+-------+
| date | ID | count |
+--------+------+-------+
|20170101| 258 | 1003 |
|20170102| 258 | 13 |
|20170103| 258 | 1 |
|20170104| 258 | 108 |
|20170109| 258 | 25 |
| ... | ... | ... |
|20170101| 2813 | 503 |
|20170102| 2813 | 139 |
| ... | ... | ... |
|20170101| 4963 | 821 |
|20170102| 4963 | 450 |
| ... | ... | ... |
+--------+------+-------+
在我的数据框中,没有一些数据。
例如,此处缺少 ID 258 的日期 20170105 ~ 20170108
而缺失数据意味着没有出现(= count == 0)。
但我也想添加计数为 0 的数据,如下所示:
+---------------+-------+
| date | ID | count |
+--------+------+-------+
|20170101| 258 | 1003 |
|20170102| 258 | 13 |
|20170103| 258 | 1 |
|20170104| 258 | 108 |
|20170105| 258 | 0 |
|20170106| 258 | 0 |
|20170107| 258 | 0 |
|20170108| 258 | 0 |
|20170109| 258 | 25 |
| ... | ... | ... |
|20170101| 2813 | 503 |
|20170102| 2813 | 139 |
| ... | ... | ... |
|20170101| 4963 | 821 |
|20170102| 4963 | 450 |
| ... | ... | ... |
+--------+------+-------+
数据框是不可变的,因此,如果我想将零计数数据添加到此数据框, 必须制作一个新的数据框。
但即使我有一个持续时间(20170101 ~ 20171231)和 ID 列表,我也不能使用 for loop 到数据帧。
如何制作新的数据框?
ps。我已经尝试过的是制作一个正确的数据框,然后比较 2 个数据框,制作另一个只有 0 个计数数据的数据框。最后联合“原始数据帧”和“0 计数数据帧”。我认为这不是好的和漫长的过程。请向我推荐一些其他有效的解决方案。
【问题讨论】:
标签: pyspark apache-spark-sql memory-efficient