我正在提取可能包含空值的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
答案 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的大小,这可能是您想要的也可能不是