1

我正在將csvs讀入Spark,並將模式設置爲所有DecimalType(10,0)列。當我查詢數據,我得到以下錯誤:如何在Spark Scala中將空NAN或無限值替換爲默認值

NumberFormatException: Infinite or NaN 

如果我在我的數據幀的NaN /空/無限的價值,我想將它們設置爲0。我該怎麼辦呢?這是我正在試圖加載數據:

var cases = spark.read.option("header",false). 
option("nanValue","0"). 
option("nullValue","0"). 
option("positiveInf","0"). 
option("negativeInf","0"). 
schema(schema). 
csv(... 

任何幫助將不勝感激。

+0

是否要將此NaN應用於零更改爲一列或所有列? –

回答

0

使用下面的表達式,您可以將單個數據框列設置爲NaN位置爲0。在這個例子中col1列中的任何NaN值將與0

val df = (1 to 10).toDF("col1").withColumn("col1",when(when($"col1".isNull, 0).otherwise($"col1").isNaN, 0).otherwise($"col1")) 
1

被替換如果您有多個列NaN值,可以使用na.fill(),以填補默認值

例如:

val spark = 
    SparkSession.builder().master("local").appName("test").getOrCreate() 

    import spark.implicits._ 

    val data = spark.sparkContext.parallelize(
    Seq((0f,0f, "2016-01-1"), 
     (1f,1f, "2016-02-2"), 
     (2f,2f, "2016-03-21"), 
     (Float.NaN,Float.NaN, "2016-04-25"), 
     (4f,4f, "2016-05-21"), 
     (Float.NaN,Float.NaN, "2016-06-1"), 
     (6f,6f, "2016-03-21")) 
).toDF("id1", "id", "date") 

data.na.fill(0).show 
+---+---+----------+ 
|id1| id|  date| 
+---+---+----------+ 
|0.0|0.0| 2016-01-1| 
|1.0|1.0| 2016-02-2| 
|2.0|2.0|  null| 
|0.0|0.0|2016-04-25| 
|4.0|4.0|2016-05-21| 
|0.0|0.0| 2016-06-1| 
|6.0|6.0|2016-03-21| 
+---+---+----------+ 
相關問題