如何为缺少的数据组合添加行并将相应的字段估算为 0

Posted

技术标签:

【中文标题】如何为缺少的数据组合添加行并将相应的字段估算为 0【英文标题】:How to add rows for missing combination of data and impute corresponding fields with 0 【发布时间】:2018-11-02 22:14:54 【问题描述】:

我有域和月份的组合以及相应月份的总订单。我想用 0 值估算缺失的组合。可以在 Pyspark 中使用的最便宜的聚合命令是什么?

我有以下输入表:

domain      month    year   total_orders
google.com  01       2017   20
yahoo.com   02       2017   30
google.com  03       2017   30
yahoo.com   03       2017   40
a.com       04       2017   50
a.com       05       2017   50
a.com       06       2017   50

预期输出:

domain      month    year   total_orders
google.com  01       2017   20
yahoo.com   02       2017   30
google.com  03       2017   30
yahoo.com   03       2017   40
a.com       04       2017   50
a.com       05       2017   50
a.com       06       2017   50
google.com  02       2017   0
google.com  04       2017   0
yahoo.com   04       2017   0
google.com  05       2017   0
yahoo.com   05       2017   0
google.com  06       2017   0
yahoo.com   06       2017   0

Here 预期的输出顺序并不重要。

【问题讨论】:

到目前为止,您在 Pyspark 中尝试过什么? 【参考方案1】:

最简单的方法是结合每个域的所有月份和年份

select my.year, my.month, d.domain, coalesce(t.total_orders, 0) as total_orders
from (select distinct month, year from input) my cross join
     (select distinct domain from input) d left join
     t
     on t.month = my.month and t.year = my.year and t.domain = d.domain;

注意:这假设每个年/月组合在数据中的某处至少出现一次。

获取某个范围内的值很麻烦,因为您已将日期拆分为多个列。让我假设年份都是一样的,就像你的例子一样:

select my.year, my.month, d.domain, coalesce(t.total_orders, 0) as total_orders
from (select distinct month, year from input) my join
     (select domain, min(month) as min_month, max(month) as max_month
      from input
     ) d
     on my.month >= d.min_month and my.month <= d.max_month left join
     t
     on t.month = my.month and t.year = my.year and t.domain = d.domain

【讨论】:

谢谢戈登。我将弄清楚如何操作这些查询以与 Spark 一起使用

以上是关于如何为缺少的数据组合添加行并将相应的字段估算为 0的主要内容,如果未能解决你的问题,请参考以下文章

如何为时间序列数据框添加行?

如何为数据表新增不为空的字段?

DataGridView控件的使用---添加行

如何为所有行中所有字段中的所有表替换 MySQL 数据库中的字符串?

如何为 MySQL 表添加索引?

MySQL如何为表字段添加索引