繁体   English   中英

根据SPARK scala中的条件处理RDD

[英]process RDD based on condition in SPARK scala

我正在提取可能包含空值的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

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

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

我只是让toInt转换“安全”,如下所示:

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM