在没有groupby或调用collect()的情况下在pyspark中有效地查找max(date)

时间:2018-05-04 09:56:42

标签: python apache-spark pyspark

1)我需要在代码中使用date_diff()来查找Date列与Max(Date)

之间的差异

我现在正在使用

from pyspark.sql import functions as F
max_date = df.select(F.max(df['date'])).collect()[0][0]
df = df.withColumn('period_difference', F.datediff(F.lit(max_date), df['date']))

大约需要6分钟才能完成。有没有更好的有效方法呢?

2)有没有办法可以在几个月内获得date_diff()返回的差异?在熊猫中你可以使用:

import numpy as np
df['period_difference'] = ((max(df['date']) - df['date']) / np.timedelta64(1, 'M'))

我只是想将pandas中的上述代码行复制到pyspark。

1 个答案:

答案 0 :(得分:0)

您可以延迟执行延迟

max_date = df.select(F.max(df['date']).alias("max_date"))    
df.crossJoin(max_date).withColumn(
   'period_difference', F.datediff(F.col('max_date'), F.col('date')
)

但一般情况下你无法避免这个问题。在不支持索引数据的未排序数据结构上查找最大值将始终需要完整数据扫描。