【问题标题】:Pyspark - filter to select max valuePyspark - 过滤器以选择最大值
【发布时间】:2022-12-01 13:21:26
【问题描述】:

我有一个列类型为“字符串”的日期列。它有多个日期和每个日期的几行数据。

我想过滤数据以选择最近的(最大)日期,但是,当我运行它时,代码运行但最终填充了一个空表。

目前我正在手动输入我想要的日期,因为我的印象是因为该列是字符串类型,所以没有任何形式的 max 函数可以工作。

This is the code I am using

extract = raw_table.drop_duplicates() \
          .filter(raw.as_of_date == '2022-11-25')

而我想做的就是让它自动化。在线的东西

.filter(raw.as_of_date == max(as_of_date)

请告知如何将列类型从字符串转换为日期,如何编码以选择最大日期以及为什么我的硬编码会导致空表

【问题讨论】:

  • 您可以先在新列中计算max,然后将该列用作过滤器。

标签: pyspark filter


【解决方案1】:

您需要计算列中日期的最大值,然后使用该列进行过滤,因为 spark 不允许在过滤器中进行聚合。

你可能需要类似下面的东西

import pyspark.sql.functions as func
from pyspark.sql.window import Window as wd

raw_table.drop_duplicates(). 
    withColumn('max_date', func.max('as_of_date').over(wd.partitionBy())). 
    filter(func.col('as_of_date') == func.col('max_date')). 
    drop('max_date')

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-30
    • 1970-01-01
    • 1970-01-01
    • 2021-05-28
    • 1970-01-01
    • 2023-03-22
    相关资源
    最近更新 更多