【发布时间】:2015-12-03 19:07:18
【问题描述】:
我正在尝试这样映射 RDD(请参阅输出结果)并按十进制值映射 reduce,但我不断收到错误。当我尝试使用带有字数的 reduceByKey() 时,它工作得很好。十进制值的总和是否不同?
val voltageRDD= myRDD.map(i=> i.split(";"))
.filter(i=> i(0).split("/")(2)=="2008")
.map(i=> (i(0).split("/")(2),i(2).toFloat)).take(5)
输出:
voltageRDD: Array[(String, Float)] = Array((2008,1.62), (2008,1.626), (2008,1.622), (2008,1.612), (2008,1.612))
尝试减少时:
val voltageRDD= myRDD.map(i=> i.split(";"))
.filter(i=> i(0).split("/")(2)=="2008")
.map(i=> (i(0).split("/")(2),i(2).toFloat)).reduceByKey(_+_).take(5)
我收到以下错误:
org.apache.spark.SparkException: Job aborted due to stage failure: Task 0 in stage 2954.0 failed 4 times, most recent failure: Lost task 0.3 in stage 2954.0 (TID 15696, 10.19.240.54): java.lang.NumberFormatException: For input string: "?"
【问题讨论】:
-
您确定您的所有数据都是这种格式吗?在您的代码中,第二个 sn-p 将运行整个数据集(因为它将执行
reduceByKey然后take),而第一个将仅针对前几条记录运行。如果在第一个5记录之后的某个地方(过滤后)你的i(2)是?它会在第二个 sn-p 但不会在第一个 sn-p 中崩溃,因为 spark 是惰性的。 -
@MateuszDymczyk 感谢您指出这一点。我的数据集不干净,因此格式不一样!
-
在这种情况下,我将其添加为答案
标签: scala apache-spark apache-spark-sql