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 组合在一起。
我的文件中只有 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 组合在一起。