任何列中都有火花/ scala下降行

时间:2018-04-26 01:05:34

标签: scala apache-spark

我正在使用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?

2 个答案:

答案 0 :(得分:1)

  
    

如何一次过滤所有NaN?

  

一般来说应该工作

df.na.drop

可以替代在每个可以为NaN 的列上使用 .isNaN函数。我们知道在Floats和Doubles 中可以使用 NaN值,因此我们需要获取具有DoubleType或FloatType的列名作为dataTypes 并执行{{1}作为

filter

或者你可以使用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(col(_).isNaN).reduce(_ or  _))

答案 1 :(得分:0)

假设df是您的数据帧。如果要删除任何列中的NaN值的所有行(在任何列中)。你可以使用

df.na.drop

如果要使用某些值填充所有NaN值,可以使用

df.na.fill(your_value)

在多列

val cols = Seq("col1","col2")
df.na.drop(cols)

但如果你想按列进行,你可以做

df.filter(!$"col_name".isNaN)

或者

df.filter(!isnan($"your_column"))