【发布时间】:2020-03-11 12:00:15
【问题描述】:
我有一个 Pyspark 数据框,其中包含一些非唯一键 key 和一些列 number 和 value。
对于大多数keys,number 列从 1 到 12,但对于其中一些,numbers 中存在间隙(例如,我们有数字 [1, 2, 5, 9])。我想添加缺失的行,这样对于每个 key,我们都会在 1-12 范围内填充最后看到的值的所有 numbers。
所以对于表
key number value
a 1 6
a 2 10
a 5 20
a 9 25
我想得到
key number value
a 1 6
a 2 10
a 3 10
a 4 10
a 5 20
a 6 20
a 7 20
a 8 20
a 9 25
a 10 25
a 11 25
a 12 25
我考虑过创建一个a 的表和一个 1-12 的数组,分解该数组并加入我的原始表,然后使用以当前行为边界的窗口函数分别用先前的值填充 value 列.不过好像有点不雅,不知道有没有更好的方法来实现我想要的?
【问题讨论】:
-
我认为在 pyspark 上下文中,你想要的很棘手。我的理解是 spark 最适合以列方式工作,添加、过滤、删除列等。我可以假设您事先不知道数字列中哪些键有间隙吗?您可以通过使用 groupBy() 和 agg() (hackingandslacking.com/…) 提取它,然后过滤以仅保留具有
标签: pyspark