1
を参照:Scalaのスパーク地図機能私は2つのデータフレームを持っている別のデータフレーム
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|
+---+---+-------+-----+
マイ所望の出力が "識別することですdf1内の各タイムスタンプについて、「t」の範囲はdf2内にある。
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|
+---+------+----+---+
私の理解では、これまでのところ、私は
df2.t`
df2.filter(df2.id == df1.id, df1.time >= df2.t_start, df1.time <= df2.t_end), and get the corresponding
に参照のうえで、行ごとに列
'id
と入力として
'time
、
map
を取るUDFを作成しなければならないということです
私はScalaとSparkの新機能ですから、この解決策が可能かどうかは疑問です。
あなたはそのためのUDFを使用することはできませんが、あなたがしなければならないすべてはあなたがすでに両方のフレームを結合するために定義されたフィルタ条件を再利用することである
あなたがこの質問をマークしているので、[タグ:スカラ] '=== 'は正しい演算子です。 – zero323
はい、あなたは正しいです。私は '==='について知らなかったし、それがタイプミスだと思った。あなたがそれを持っていたので、私はそれを元に戻しました。 - '=='と '==='の違いは何ですか? –
'==='はSQLの等価性です。 '=='は、意味のない列オブジェクトを比較します。 – zero323