Scala中的Distinct在数组上返回空字符串

aurhwmvo  于 5个月前  发布在  Scala
关注(0)|答案(1)|浏览(48)

我试图从GitHub上的click here代码中学习graphx
在spark-shell上,当我尝试这个:

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)
}

val textRDD = sc.textFile("/user/user01/data/rita2014jan.csv")

val flightsRDD = textRDD.map(parseFlight).cache()

val airports = flightsRDD.map(flight => (flight.org_id, flight.origin)).distinct

airports.take(1)

字符串
我得到了这个异常,它指向airports.take(1)

java.lang.NumberFormatException: empty String


有人能告诉我我错过了什么吗?

pdsfdshx

pdsfdshx1#

它很可能来自输入中的一行,其中一个要转换为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等转换相反)。

相关问题