我试图将csv文件中的值映射到RDD中,但是我得到了以下错误,因为其中一些字段为null。
线程“主”org.apache.spark.SparkException中的异常:由于阶段失败而中止作业:阶段0.0中的任务0失败1次,最近一次失败:阶段0.0中丢失的任务0.0 (TID 0,本地主机,执行器驱动程序):java.lang.NumberFormatException:空字符串
下面是我正在使用的代码。
// Load and parse the data
val data = sc.textFile("data.csv")
val parsedData = data.map(s => Vectors.dense(s.split(',').map(_.toDouble))).cache()
有没有办法检查是否有空?我想用一种尝试捕捉的方法来做这件事,但它似乎行不通。
val parsedData = data.map(s => {
try {
val vector = Vectors.dense(s.split(',').map(_.toDouble))
}catch{
case e:NumberFormatException => println("Nulls somewhere")
}
(vector)
})
发布于 2019-01-06 09:46:44
您可以过滤掉空项,只需将filter
方法添加到流中:
val parsedData = data.map(s => Vectors.dense(s.split(',').filter(!_.isEmpty).map(_.toDouble))).filter(_.size != 0)
这样,任何空行都会导致空Vector
,可以进一步过滤。
https://stackoverflow.com/questions/54063082
复制