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

时间:2017-02-05 11:20:23

标签: performance scala apache-spark apache-spark-sql spark-dataframe

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

Deserialize

OR

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

1 个答案:

答案 0 :(得分:1)

由于dt_column已经在yyyy-MM-dd,因此无需cast / unix_timestampInternally spark does lexicographic comparison with Strings only for all date types(自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提供了以diff格式创建日期的选项。距离   从那以后,在性能方面不应该有任何差异