2016-09-02 3 views
1

Ich habe zwei DataFrames mit zwei verschiedenen Zeitreihendaten. Zur Vereinfachung nennen wir sie Events und Status.Wie effektiv 2 DateFrames basierend auf Timestamp Unterschied beizutreten?

events: 
root 
|-- timestamp: timestamp (nullable = true) 
|-- event_type: string (nullable = true) 
|-- event_id: string (nullable = true) 

statuses: 
root 
|-- timestamp: timestamp (nullable = true) 
|-- status: string (nullable = true) 
|-- field1: string (nullable = true) 
|-- field2: string (nullable = true) 
|-- field3: string (nullable = true) 

Ich mag würde sie verbinden, so wird jeder Event eine Spalte von list_statuses haben, die alle Objekte von Zuständen in den vorherigen X Stunden seines eigenen Zeitstempel enthält.

Ich kann es durch ein kartesisches Produkt von events und statuses und dann filter für die Zeitkriterien tun, aber das es (extrem) ineffizient ist.

Gibt es einen besseren Weg, es zu tun? Alles von der Stange?

(ich dachte, um beide Datenrahmen in einem Zeitfenster zu gruppieren, dann verbinden sich selbst die zweite, um sowohl die aktuellen und die früheren Zeitfenster zu enthalten und dann zwischen ihnen und Filter, aber wenn es etwas bereit und Bug ist -frei, würde ich gerne benutzen ...)

Danke!

Antwort

0

fast 2 Monate später, aber ich dachte, es könnte andere helfen, wenn ich etwas schreibe ich zu bekommen:

http://zachmoshe.com/2016/09/26/efficient-range-joins-with-spark.html

Es im Grunde eine effizientere Implementierung von Entfernungs-Verbindung zwischen zwei Datensätze basierend auf einem Zeitstempel oder ein numerisches Feld (Scala, mit Spark 2.0).

Verwandte Themen