根据SPARK scala中的条件处理RDD

时间:2014-06-24 19:54:25

标签: scala apache-spark

我正在提取可能包含空值的csv文件列。那么,在调用toInt之前,我需要先将这些空值转换为0?

val field= sc.textFile("test.txt").map(_.split(",")(8))

我将如何完成这项工作?

样本数据如下:

3070811,1963,1096,,"US","CA",,1,
3022811,1963,1096,,"US","CA",,1,56
3033811,1963,1096,,"US","CA",,1,23

3 个答案:

答案 0 :(得分:1)

需要传递-1才能拆分,因此它包含空列。

val field= sc.textFile("test.txt").map{
    val x = _.split(",",-1)(8)
    if (x.isEmpty) 0 else x.toInt
}

答案 1 :(得分:0)

我只是让toInt转换安全'就像这样:

def safeToInt(s:String) = Try(s.toInt).getOrElse(0)
val field= sc.textFile("test.txt").map(entry => safeToInt(entry.split(",",-1)(8)))

答案 2 :(得分:0)

您还可以过滤掉这些行,这样0值就不会改变您的统计数据

val field= sc.textFile("test.txt").map{
  val x = _.split(",",-1)(8)
}.filter{!_.isEmpty}.map{_.toInt}

这将改变您的字段RDD的大小,这可能是您想要的也可能不是