2017-02-11 55 views
0

我有一個RDD,叫醫生,如:RDD與空字符串使0.0

age,part,day,val 
9,elbow,Mon Aug 15 00:00:00 EDT 3399,1.0 
9,elbow,Mon Aug 15 00:00:00 EDT 3399, 
9,neck,Mon Aug 18 00:00:00 EDT 3499,1.0 

有一個在VAL列在某些行的空白處。
有沒有辦法保持這種RDD,但用0.0代替所有空字符串?

我試了一個有條件的地圖.isEmpty()但雙倍不能使用isEmpty()
我也嘗試了有條件的地圖,(if doctor.val == '') 0.0 else doctor.val,但是,這並不工作,要麼

回答

1

我覺得spark-csv會有所幫助,但這裏是純粹的Scala的方法。

當你說「空白空間」時,我假設你的字面意思是那裏有一些空白,並且該行不僅以逗號結尾。

case class Doctor(age:Int, part:String,day:String,value:Double) 

val line = "9,elbow,Mon Aug 15 00:00:00 EDT 3399, " 
val data = line.split(",").map(_.trim).map { 
    case "" => "0.0" 
    case (x:String) => x 
} 
val doc = Doctor(data(0).toInt, data(1), data(2), data(3).toDouble) 

輸出

data: Array[String] = Array(9, elbow, Mon Aug 15 00:00:00 EDT 3399, 0.0) 
doc: Doctor(9,elbow,Mon Aug 15 00:00:00 EDT 3399,0.0) 

至於星火而言......這使得一個RDD[Doctor]

case class Doctor(age:Int, part:String,day:String,value:Double) 

sc.textFile(fileName).map { line => 
    val data = line.split(",").map(_.trim).map { 
     case "" => "0.0" 
     case (x:String) => x 
    } 
    Doctor(data(0).toInt, data(1), data(2), data(3).toDouble) 
} 
+0

你能做到這一點上RDD? –

+0

當然。類似於'sc.textFile(「file.txt」)。map {line => ...}'? –

+0

這就是我一直在嘗試,但我不能保留所有元素,並刪除空字符串,因爲它是一個雙,我們不能做double.isEmpty() –