gpt4 book ai didi

scala - spark/scala 在任何列中删除带有 nan 的行

转载 作者:行者123 更新时间:2023-12-05 03:06:04 25 4
gpt4 key购买 nike

我正在使用 Zeppelin,df 是 spark DataFrame。我尝试过滤任何行中可能出现的 NaN,但由于某种原因它没有过滤掉它。

val df = df_labeled("df_Germany")
df: org.apache.spark.sql.DataFrame = [Kik: string, Lak: string ... 15 more fields]

df.count()
res66: Long = 455

df.na.drop().count
res66: Long = 455

如何一次过滤所有 NaN?

最佳答案

How do I filter NaNs all at once?

通常以下应该有效

df.na.drop

但是有一个替代方法可以使用 .isNaN 函数在每个可以为 NaN 的列上。而且我们知道 NaN 值在 Floats 和 Doubles 中是可能的,所以我们需要获取具有 DoubleType 或 FloatType 作为数据类型的列名并执行 filter 作为

import org.apache.spark.sql.functions._
val nan_columns = df.schema.filter(x => x.dataType == DoubleType || x.dataType == FloatType).map(_.name)
df.filter(!nan_columns.map(col(_).isNaN).reduce(_ or _))

或者您可以使用 isnan 内置函数作为

import org.apache.spark.sql.functions._
val nan_columns = df.schema.filter(x => x.dataType == DoubleType || x.dataType == FloatType).map(_.name)
df.filter(!nan_columns.map(x => isnan(col(x))).reduce(_ or _))

关于scala - spark/scala 在任何列中删除带有 nan 的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50033354/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com