Ich habe zwei Datenrahmen:Scala Funken - Map-Funktion Referenzierung einen anderen Datenrahmen
df1:
+---+------+----+
| id|weight|time|
+---+------+----+
| A| 0.1| 1|
| A| 0.2| 2|
| A| 0.3| 4|
| A| 0.4| 5|
| B| 0.5| 1|
| B| 0.7| 3|
| B| 0.8| 6|
| B| 0.9| 7|
| B| 1.0| 8|
+---+------+----+
df2:
+---+---+-------+-----+
| id| t|t_start|t_end|
+---+---+-------+-----+
| A| t1| 0| 3|
| A| t2| 4| 6|
| A| t3| 7| 9|
| B| t1| 0| 2|
| B| t2| 3| 6|
| B| t3| 7| 9|
+---+---+-------+-----+
Meine gewünschte Ausgabe ist die "zu identifizieren, t 'für jeden Zeitstempel in df1, wobei die Bereiche von' t 'in df2 sind.
df_output:
+---+------+----+---+
| id|weight|time| t |
+---+------+----+---+
| A| 0.1| 1| t1|
| A| 0.2| 2| t1|
| A| 0.3| 4| t2|
| A| 0.4| 5| t2|
| B| 0.5| 1| t1|
| B| 0.7| 3| t2|
| B| 0.8| 6| t2|
| B| 0.9| 7| t3|
| B| 1.0| 8| t3|
+---+------+----+---+
Mein Verständnis so weit ist, dass ich eine UDF erstellen müssen, die die Spalte 'id
und 'time
als Eingänge, map
für jede Zeile von beziehe zu df2.filter(df2.id == df1.id, df1.time >= df2.t_start, df1.time <= df2.t_end), and get the corresponding
df2.t`
Ich bin sehr neu in Scala und Spark, also frage ich mich, ob diese Lösung überhaupt möglich ist?
Da Sie diese Frage mit markiert [tag: scala] '=== 'ist ein richtiger Operator. – zero323
Ja, Sie haben Recht. Ich wusste nichts von "===" und dachte, es wäre ein Tippfehler. Ich habe es so korrigiert, wie Sie es hatten, und es funktioniert jetzt! - Was ist der Unterschied zwischen '==' und '==='? –
'===' ist eine SQL-Gleichheit. '==' vergleicht Spaltenobjekte, was nicht wirklich sinnvoll ist. – zero323