【问题标题】:Differences between null and NaN in spark? How to deal with it?spark中null和NaN的区别?如何处理?
【发布时间】:2017-10-08 12:36:13
【问题描述】:

在我的DataFrame中,有列分别包含null和NaN的值,如:

df = spark.createDataFrame([(1, float('nan')), (None, 1.0)], ("a", "b"))
df.show()

+----+---+
|   a|  b|
+----+---+
|   1|NaN|
|null|1.0|
+----+---+

它们之间有什么区别吗?如何处理?

【问题讨论】:

    标签: python apache-spark null pyspark nan


    【解决方案1】:

    null values 表示“无值”或“无”,它甚至不是空字符串或零。可以用来表示不存在任何有用的东西。

    NaN 代表“非数字”,它通常是没有意义的数学运算的结果,例如0.0/0.0.

    处理 null 值的一种可能方法是删除它们:

    df.na.drop()
    

    或者您可以将它们更改为实际值(这里我使用 0):

    df.na.fill(0)
    

    另一种方法是选择特定列为 null 的行进行进一步处理:

    df.where(col("a").isNull())
    df.where(col("a").isNotNull())
    

    也可以使用等效方法选择具有 NaN 的行:

    from pyspark.sql.functions import isnan
    df.where(isnan(col("a")))
    

    【讨论】:

    • 我从@Shadio 得到了完整的答案。谢谢!
    • 这是一个完美答案的例子,很好:)
    • 谢谢,很高兴为您提供帮助。 :)
    • 但是当我计算1.0/0.0 时,我得到null 而不是NaN。为什么?
    • @PanChao:除以零时会发生什么,在不同的语言和类型中可能会有所不同。例如,在 Scala 中,1.0/0.0 将是无穷大:stackoverflow.com/questions/43938418/…0.0/0.0 很可能会给你一个NaN
    【解决方案2】:

    您可以使用函数 isnan 来区分您的 NaN 值,例如这个示例

    >>> df = spark.createDataFrame([(1.0, float('nan')), (float('nan'), 2.0)], ("a", "b"))
    >>> df.select(isnan("a").alias("r1"), isnan(df.a).alias("r2")).collect()
    [Row(r1=False, r2=False), Row(r1=True, r2=True)]
    

    不同之处在于生成值的对象的类型。 NaN(不是数字)是处理“数字无值”的一种老式方式,您可以认为您拥有所有数字(-1-2...0,1,2...)和需要有额外的价值,对于错误的情况(例如,1/0),我希望 1/0 给我一个数字,但是哪个数字?好吧,就像 1/0 有数字一样,它们创建了一个名为 NaN 的新值,它也是 Number 类型。

    None 用于 void,没有元素,更加抽象,因为在数字类型中,除了 de NaN 值之外,还有 None 值。 None 值存在于所有类型的所有值集中

    【讨论】:

    • 谢谢,能指出spark中null和nan这两种类型的区别吗?我仍然对为什么 spark 退出这两种类型而不代表什么感到困惑。
    • 我希望这能启发你的思想,你的问题很有趣,因为理解和处理这类概念并不简单。不错:)
    【解决方案3】:

    您可以使用此代码处理它

    df = df.where(pandas.notnull(df), None)
    

    代码会将任何 NaN 值转换为 null

    以下是参考链接

    Link

    【讨论】:

      猜你喜欢
      • 2016-01-05
      • 2017-05-22
      • 1970-01-01
      • 2018-10-23
      • 2016-03-19
      • 2013-07-23
      • 2012-08-25
      • 2022-01-25
      相关资源
      最近更新 更多