Wie die Gruppe von Zeit-Intervall in Spark SQL
Mein Datensatz sieht wie folgt aus:
KEY |Event_Type | metric | Time
001 |event1 | 10 | 2016-05-01 10:50:51
002 |event2 | 100 | 2016-05-01 10:50:53
001 |event3 | 20 | 2016-05-01 10:50:55
001 |event1 | 15 | 2016-05-01 10:51:50
003 |event1 | 13 | 2016-05-01 10:55:30
001 |event2 | 12 | 2016-05-01 10:57:00
001 |event3 | 11 | 2016-05-01 11:00:01
Will ich alle zu erhalten, wenn Sie die Schlüssel, die dies bestätigen:
"SUMME der Metrik für ein bestimmtes Ereignis" > Schwelle während 5 Minuten .
Dies erscheint mir ein guter Kandidat für die Verwendung der Schiebefenster Funktionen .
Wie kann ich das mit Spark SQL ?
Danke.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Funke >= 2.0
Können Sie
window
(nicht zu verwechseln mit window-Funktionen). Je nach Variante weist es der Zeitstempel, die auf eine weitere, möglicherweise überlappende buckets:Funke < 2.0
Können, beginnen mit Beispiel-Daten:
Ich gehe davon aus, das Ereignis ist gekennzeichnet durch
KEY
. Wenn dies nicht der Fall ist, können Sie anpassenGROUP BY
/PARTITION BY
Klauseln, nach Ihren Anforderungen.Wenn Sie interessiert sind, die eine aggregation mit statischen Fenster unabhängig von Daten konvertieren von timestamps, um einen numerischen Datentyp und Runde
Wenn Sie interessiert sind, eines Fensters relativ zur aktuellen Zeile verwenden, Fenster Funktionen:
Aus performance-Gründen ist dieser Ansatz nur dann sinnvoll, wenn Daten kann partitioniert in mehrere getrennte Gruppen. In Funke < 2.0.0 müssen Sie auch
HiveContext
machen, damit es funktioniert.Für statische Grenze, die Sie tun können, folgende:
1) Transform (map, mapPartitions usw) - Zeit-Wert auf form YYYY-MM-DD-hh-mm mm eingerollt in 5 Minuten level. z.B. 01, 02, 03, 05 wird 05; 16,17,18,19,20 wird 20
2) Führen Sie die groupBy-oder reduceBy mit event_type und Zeit und führen Sie Ihre aggregation(Sum) auf Metriken
3) Führen Sie die filter-transformation filter, Metriken > 5
Schreiben Sie oben in spark rdd oder dataframe(sql) in der fast gleichen Weise.
Für eine andere Art von Grenze, wo 00-05, 01-06, 02-07, sollten Sie versuchen, in Konzept von Schiebefenster. Wenn Sie Ihre Daten Verschlucken Anwendungsfall passt streaming-Muster Spark-Streaming-API wird perfekt sein, ansonsten kann man benutzerdefinierte Lösung wie diese hier:
Apache Spark - Umgang mit Schiebefenster auf die Zeitliche RDDs