它很可能来自输入中的一行,在该行中,您要转换为Double的字段为空。
错误很可能来自此函数(应用于spark管道的开头):
def parseFlight(str: String): Flight = {
val line = str.split(",")
Flight(line(0), line(1), line(2), line(3), line(4).toInt, line(5).toLong, line(6), line(7).toLong, line(8), line(9).toDouble, line(10).toDouble, line(11).toDouble, line(12).toDouble, line(13).toDouble, line(14).toDouble, line(15).toDouble, line(16).toInt)
}
在某个时候
.toDouble
应用于
""
(空字符串)。
例如,您可以通过以下操作再现相同的错误:
"aa,,,s".split(",")(2).toDouble
其产生:
java.lang.NumberFormatException: empty String
该错误使您认为它来自包含
airports.take(1)
因为它是包含第一个
action
您的管道(这是RDD的惰性丢失的地方,而不是map之类的转换)。