在pyspark中有效地查找max(date),而无需groupby或调用collect()



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'))

我只是想在熊猫中将上面的代码行复制到 pyspark。

你可以延迟执行

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')
)

但是您通常无法避免该问题。在不支持索引数据的未排序数据结构上找到最大值将始终需要完整的数据扫描。

最新更新