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

She*_*ahn 5 null nan apache-spark apache-spark-sql pyspark

我正在尝试创建一个函数来检查数据质量(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()
Run Code Online (Sandbox Code Playgroud)

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

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

列中存在明显的空值,我该如何解决这个问题?

bla*_*hop 10

您可以用来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()
Run Code Online (Sandbox Code Playgroud)