/ / स्काला: स्पार्क sqlContext क्वेरी - sql, hadoop, apache-spark, apache-spark-sql, parquet

स्काला: स्पार्क sqlContext क्वेरी - sql, hadoop, apache- स्पार्क, अपाचे-स्पार्क-sql, लकड़ी की छत

मेरी फ़ाइल में केवल 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 में, मैं आईडी द्वारा डेटा का विलय कैसे करूँ? मैं आईडी 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)

उत्तर:

जवाब के लिए 2 № 1
SELECT id, max(date1), max(date2), max(date3) FROM parquetFile group by id

जवाब के लिए 0 № 2

जिस तरह से डेटा उत्पन्न होता है, ऐसा लगता है कि फ़ाइल में स्कीमा भ्रामक है। समस्या यह है कि सभी तिथियां तारीख 1 क्षेत्र में अलग-अलग घटनाओं के प्रकार के साथ आबादी में हैं। इसलिए, हमें इसे ठीक करने की आवश्यकता है।

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

बेशक, यह समूह आईडी और टीएस एक साथ, जैसा कि उत्तर में अपेक्षित है।