Scala:Spark sqlContext 查询

Scala: Spark sqlContext query

我的文件中只有 3 个事件(第 3 列)01、02、03。

模式是 unixTimestamp|id|eventType|date1|date2|date3

639393604950|1001|01|2015-05-12 10:00:18|||
639393604950|1002|01|2015-05-12 10:04:18|||
639393604950|1003|01|2015-05-12 10:05:18|||
639393604950|1001|02||2015-05-12 10:40:18||
639393604950|1001|03|||2015-05-12 19:30:18|
639393604950|1002|02|2015-05-12 10:04:18|||

在sqlContext中,如何按ID合并数据?我期待 id 1001:

639393604950|1001|01|2015-05-12 10:00:18|2015-05-12 10:40:18|2015-05-12 19:30:18|

这是我需要调整的查询:

val events = sqlContext.sql("SELECT id, max(date1), max(date2), max(date3) " +
  "FROM parquetFile group by id, date1, date2, date3")
events.collect().foreach(println)
SELECT id, max(date1), max(date2), max(date3) FROM parquetFile group by id

数据的生成方式,文件中的架构看起来很混乱。问题是所有日期都填充在 date1 字段中,具有不同的事件类型。因此,我们需要修复它。

select id, ts, max(d1),max(d2),max(d3)
   from (select id, ts,
                case when eventtype='01' then date1 else null end d1,
                case when eventtype='02' then date1 else null end d2,
                case when eventtype='03' then date1 else null end d3
             from table1
         ) x group by id,ts

当然,正如答案中预期的那样,这会将 id 和 ts 组合在一起。