PySpark - 使用 TimeStamp 数据类型解决 isnan 错误

Posted

技术标签:

【中文标题】PySpark - 使用 TimeStamp 数据类型解决 isnan 错误【英文标题】:PySpark - Resolving isnan errors with TimeStamp datatype 【发布时间】:2022-01-24 06:01:19 【问题描述】:

我正在尝试创建一个函数来检查数据的质量(nans/nulls 等) 我在 PySpark DataFrame 上运行以下代码

df.select([f.count(f.when((f.isnan(c) | f.col(c).isNull()), c)).alias(c) for c in cols_check]).show()

只要要检查的列是字符串/整数,我就没有问题。但是,当我检查数据类型为 datetimestamp 的列时,我收到以下错误:

由于数据类型不匹配,无法解析“isnan(Date_Time)”: 参数 1 需要(双精度或浮点)类型,但是,'Date_Time' 是 时间戳类型。;;\n'聚合...

列中有明显的空值,如何补救?

【问题讨论】:

【参考方案1】:

您可以使用df.dtypes 检查每列的类型,并能够像这样以不同的方式处理timestampdate 空计数:

from pyspark.sql import functions as F

df.select(*[
    (
        F.count(F.when((F.isnan(c) | F.col(c).isNull()), c)) if t not in ("timestamp", "date")
        else F.count(F.when(F.col(c).isNull(), c))
    ).alias(c)
    for c, t in df.dtypes if c in cols_check
]).show()

【讨论】:

以上是关于PySpark - 使用 TimeStamp 数据类型解决 isnan 错误的主要内容,如果未能解决你的问题,请参考以下文章

Pyspark 错误:“未定义函数:'from_timestamp'

Pyspark:to_timestamp返回不正确的时间戳值[重复]

Pyspark:在动态配置单元查询中获取 current_timestamp

Pyspark to_timestamp 与时区

如何在 PySpark 中跨多个时间间隔使用 .filter() 操作?

pyspark:使用自定义时间序列数据的滚动平均值