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()
只要要检查的列是字符串/整数,我就没有问题。但是,当我检查数据类型为 date
或 timestamp
的列时,我收到以下错误:
由于数据类型不匹配,无法解析“isnan(
Date_Time
)”: 参数 1 需要(双精度或浮点)类型,但是,'Date_Time
' 是 时间戳类型。;;\n'聚合...
列中有明显的空值,如何补救?
【问题讨论】:
【参考方案1】:您可以使用df.dtypes
检查每列的类型,并能够像这样以不同的方式处理timestamp
和date
空计数:
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