重複しているエントリのすべてのレコードを削除したいのですが、タイムスタンプの違いはオフセットの時間の長さになる可能性がありますが、簡単にするためには2分を使用します。閉じるタイムスタンプのエントリを削除する
+-------------------+-----+----+
|Date |ColA |ColB|
+-------------------+-----+----+
|2017-07-04 18:50:21|ABC |DEF |
|2017-07-04 18:50:26|ABC |DEF |
|2017-07-04 18:50:21|ABC |KLM |
+-------------------+-----+----+
私はこのような何かを試してみましたが、これは重複を削除しない行のみ
+-------------------+-----+----+
|Date |ColA |ColB|
+-------------------+-----+----+
|2017-07-04 18:50:26|ABC |DEF |
|2017-07-04 18:50:21|ABC |KLM |
+-------------------+-----+----+
を持っている私のデータフレームをしたいと思います。今の
val joinedDfNoDuplicates = joinedDFTransformed.as("df1").join(joinedDFTransformed.as("df2"), col("df1.ColA") === col("df2.ColA") &&
col("df1.ColB") === col("df2.ColB") &&
&& abs(unix_timestamp(col("Date")) - unix_timestamp(col("Date"))) > offset
)
、私はちょうど特定の列に基づいて、ここでFind minimum for a timestamp through Spark groupBy dataframeデータの分で明確なまたはグループを選択するのですが、私は、より堅牢なソリューションをしたいと思います。この理由は、その間隔の外のデータがあり得ることです有効なデータ。また、オフセットは要件に応じて5秒または5分以内に変更することができます。
誰かが、日付を比較するUDFの作成について言及しましたが、他のすべての列が同じである場合は、私は行をフィルタリングしたりフラグを追加してそれらの行を削除する助けていただければ幸いです。
ここに似たSQL質問Duplicate entries with different timestamp
ありがとう!