scala:spark-sqlcontext查询

vd2z7a6w  于 2021-06-02  发布在  Hadoop
关注(0)|答案(2)|浏览(307)

我的文件中只有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合并数据?我希望这是身份证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)
icnyk63a

icnyk63a1#

SELECT id, max(date1), max(date2), max(date3) FROM parquetFile group by id
6ovsh4lw

6ovsh4lw2#

数据的生成方式,看起来文件中的模式很混乱。问题是所有日期都填充在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分组在一起,正如答案中预期的那样。

相关问题