Spark数据帧添加缺失值

时间:2016-12-13 12:14:46

标签: sql apache-spark pyspark apache-spark-sql spark-dataframe

我有以下格式的数据框。我想为每个客户添加空行以缺少时间戳。

catalog

结果表的格式应为

+-------------+----------+------+----+----+
| Customer_ID | TimeSlot |  A1  | A2 | An |
+-------------+----------+------+----+----+
| c1          |        1 | 10.0 |  2 |  3 |
| c1          |        2 | 11   |  2 |  4 |
| c1          |        4 | 12   |  3 |  5 |
| c2          |        2 | 13   |  2 |  7 |
| c2          |        3 | 11   |  2 |  2 |
+-------------+----------+------+----+----+

我有100万客户和360(在上面的示例中只描绘了4个)时隙。 我找到了一种方法来创建一个包含2列(Customer_id,Timeslot)的数据帧(1 M x 360行),并使用原始数据帧进行左外连接。

有更好的方法吗?

2 个答案:

答案 0 :(得分:3)

您可以将其表达为SQL查询:

{{1}}

注意:

  • 你应该把它放到另一个数据帧中。
  • 您可能拥有包含可用客户和/或时段的表格。使用那些而不是子查询。

答案 1 :(得分:0)

我认为可以使用gordon linoff的答案,但你可以添加以下thinsg,因为你声明有数百万的客户并且你正在进行加入。

为TimeSlot使用计数表?因为它可能会带来更好的表现。 更多可用性请参考以下链接

http://www.sqlservercentral.com/articles/T-SQL/62867/

我认为您应该使用分区或行号功能来划分列customerid并根据某个分区值选择客户。例如,只需选择行号值,然后与计数表交叉连接。它可以改善你的表现。