1

私は日付でフィルタリングする必要がある巨大なデータセットを持っています(日付はyyyy-MM-dd形式で保存されています)。以下のオプションのどれを計算するのが最も効率的な方法ですか(そしてその理由)? dt_columnとしてスパーク:計算上効率的な日付比較の方法は?

df.filter("unix_timestamp(dt_column,'yyyy-MM-dd') >= unix_timestamp('2017-02-03','yyyy-MM-dd')")

OR

df.filter("cast(dt_column as date) >= cast('2017-02-03' as date)")

+0

両方のクエリのパフォーマンス特性に大きな違いはありません。 –

答えて

1

それが再びyyyy-MM-ddですでにcast/unix_timestampに必要ではありません。 Internally spark does lexicographic comparison with Strings only for all date types(Spark 2.1以降)。比較が発生した場合、低レベルではdateタイプはありません。

今やcast('2017-02-03' as date)とは、定数としてパフォーマンスの問題を引き起こさないかもしれません。 私は

//These two should be the same 
df.filter(df("dt_column") >= lit("2017-02-03")) 

df.filter(df("dt_column") >= lit("2017-02-03").cast(DataTypes.DateType)) 

castunix_timestampコンパイル時に構文の問題をキャッチするために、データセットの機能を使用することができrecommandたい文字列から日付を生成しますが、 unix_timestampは、差分形式で日付を作成するためのオプションを提供します両方。そこから を除いて、は、パフォーマンスの面で差異があってはなりません

関連する問題