Spark:计算高效的日期比较方法



我有一个庞大的数据集,需要按日期进行筛选(日期存储为yyyy-MM-dd格式)。以下哪个选项是计算效率最高的方法(为什么)?

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

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

由于dt_column已经在yyyy-MM-dd中,因此无需再进行cast/unix_timestamp内部spark只对所有日期类型与Strings进行字典比较(自spark 2.1起)。进行比较时,不会有任何低级别的date类型。

现在cast('2017-02-03' as date)unix_timestamp('2017-02-03','yyyy-MM-dd')可能不会导致性能问题,因为它是恒定的我建议您在编译时使用DataSet函数来捕获语法问题

//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都从字符串中生成日期unix_timestamp提供了以不同格式创建日期的选项。分开地因此,在性能方面不应该有任何差异

最新更新