簡體   English   中英

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組合在一起。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM