有没有办法填充 PySpark 中缺少的列日期和行值?目前,我将数据帧转换为 Pandas 并在那里重新索引。
sdf.show()
+---+----------+----------+----------+
| id|2018-01-01|2018-01-03|2018-01-05|
+---+----------+----------+----------+
| 1 | 0.0| 1.0| 0.0|
| 2 | 4.0| 2.0| 0.0|
| 3 | 0.0| 1.0| 1.0|
| 7 | 0.0| 2.0| 9.0|
| 8 | 8.0| 0.0| 0.0|
| 9 | 0.0| 0.0| 3.0|
+---+----------+----------+----------+
idx = pd.date_range('01-01-2018', '01-07-2018').date
df = sdf.toPandas()
df = df.set_index('id')
df = df.reindex(idx, axis=1, fill_value=0)
我在 PySpark 中找不到类似的东西。
期望的输出:
+---+----------+----------+----------+----------+----------+
| id|2018-01-01|2018-01-02|2018-01-03|2018-01-04|2018-01-05|
+---+----------+----------+----------+----------+----------+
| 1 | 0.0| 0.0| 1.0| 0.0| 0.0|
| 2 | 4.0| 0.0| 2.0| 0.0| 0.0|
| 3 | 0.0| 0.0| 1.0| 0.0| 1.0|
| 7 | 0.0| 0.0| 2.0| 0.0| 9.0|
| 8 | 8.0| 0.0| 0.0| 0.0| 0.0|
| 9 | 0.0| 0.0| 0.0| 0.0| 3.0|
+---+----------+----------+----------+----------+----------+
您可以使用lit()到中的值idx
数据框中尚未存在。
注意我已将列转换为字符串只是为了测试:
ids = [str(i) for i in idx] #may not be required
to_add = [col for col in ids if col not in df.columns]
out = df.select(df.columns+ [lit(0).alias(name) for name in to_add])
out.show()
+---+----------+----------+----------+----------+----------+----------+----------+
| id|2018-01-01|2018-01-03|2018-01-05|2018-01-02|2018-01-04|2018-01-06|2018-01-07|
+---+----------+----------+----------+----------+----------+----------+----------+
| 1| 0.0| 1.0| 0.0| 0| 0| 0| 0|
| 2| 4.0| 2.0| 0.0| 0| 0| 0| 0|
| 3| 0.0| 1.0| 1.0| 0| 0| 0| 0|
| 7| 0.0| 2.0| 9.0| 0| 0| 0| 0|
| 8| 8.0| 0.0| 0.0| 0| 0| 0| 0|
| 9| 0.0| 0.0| 3.0| 0| 0| 0| 0|
+---+----------+----------+----------+----------+----------+----------+----------+
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)