很直接。是不是跑起来更快
df.filter(col("date_col").cast("timestamp") >= lit(my_timestamp) )
或
df.withColumn("date_col_cast_timestamp", col("date_col").cast("timestamp") ) \
.filter("date_col_cast_timestamp" >= lit(my_timestamp) )
或者再来一次
df.withColumn("date_col_cast_timestamp", col("date_col").cast("timestamp") ) \
.withColumn("my_timestamp", lit(my_timestamp)) \
.filter("date_col_cast_timestamp" >= col("my_timestamp"))
如果你能解释一下原因,我将不胜感激。我对spark的理解不是最好的,当我尝试做一个过滤器(cast >= lit)时,我注意到创建了数千个任务,而不是几百个。不知道这是更好还是更糟。我不知道它是慢了还是快了。
1条答案
按热度按时间iszxjhcz1#
比较不同解决方案的最佳方法是使用
explain
函数并比较方案。就你的情况而言,我认为第一种解决办法比较好
在其他解决方案中,您使用的是创建一个全新列的
withColumn
,而在第一个解决方案中并非如此。如果您希望将来多次使用date和timestamps列,则可以接受此解决方案。