产生的原因:java.lang.ArrayIndexOutOfBoundsException火花flatMap

问题描述:

相关代码如下:产生的原因:java.lang.ArrayIndexOutOfBoundsException火花flatMap

val cateList = featureData.map{ 
    case (psid: String, label: String, cate_features: ParArray[String], media_features: String) => 
     val pair_feature = cate_features.zipWithIndex.map(x => (x._2, x._1)) 
     pair_feature 
}.flatMap(_.toList) 

它配错在flatMap,有什么不对?哪里存在问题?

完整的错误信息:

它主要岗位的错误java.lang.ArrayIndexOutOfBoundsException。我认为存在某处去访问阵列。我不熟悉Scala。任何帮助将受到欢迎。韩国社交协会。

17/01/23 12:23:08 INFO scheduler.TaskSetManager: Lost task 29.3 in stage 0.0 (TID 53) on executor 10.39.2.232: java.lang.ArrayIndexOutOfBoundsException (3) [duplicate 9] 
17/01/23 12:23:08 ERROR scheduler.TaskSetManager: Task 29 in stage 0.0 failed 4 times; aborting job 
17/01/23 12:23:08 INFO cluster.YarnScheduler: Cancelling stage 0 
17/01/23 12:23:08 INFO cluster.YarnScheduler: Stage 0 was cancelled 
17/01/23 12:23:08 INFO scheduler.DAGScheduler: ShuffleMapStage 0 (flatMap at ETL.scala:132) failed in 27.635 s 
17/01/23 12:23:08 INFO scheduler.DAGScheduler: Job 0 failed: reduce at ETL.scala:205, took 27.763709 s 
Exception in thread "main" org.apache.spark.SparkException: Job aborted due to stage failure: Task 29 in stage 0.0 failed 4 times, most recent failure: Lost task 29.3 in stage 0.0 (TID 53, 10.39.2.232): java.lang.ArrayIndexOutOfBoundsException: 3 at com.sina.adalgo.feature.ETL$$anonfun$11$$anonfun$13.apply(ETL.scala:111) 
at com.sina.adalgo.feature.ETL$$anonfun$11$$anonfun$13.apply(ETL.scala:111) 
at scala.collection.Iterator$$anon$11.next(Iterator.scala:328) 
at scala.collection.Iterator$$anon$11.next(Iterator.scala:328) 
at org.apache.spark.storage.MemoryStore.unrollSafely(MemoryStore.scala:283) 
at org.apache.spark.CacheManager.putInBlockManager(CacheManager.scala:171) 
at org.apache.spark.CacheManager.getOrCompute(CacheManager.scala:78) 
at org.apache.spark.rdd.RDD.iterator(RDD.scala:268) 
at org.apache.spark.rdd.MapPartitionsRDD.compute(MapPartitionsRDD.scala:38) 
at org.apache.spark.rdd.RDD.computeOrReadCheckpoint(RDD.scala:306) 
at org.apache.spark.rdd.RDD.iterator(RDD.scala:270) 
at org.apache.spark.rdd.MapPartitionsRDD.compute(MapPartitionsRDD.scala:38) 
at org.apache.spark.rdd.RDD.computeOrReadCheckpoint(RDD.scala:306) 
at org.apache.spark.rdd.RDD.iterator(RDD.scala:270) 
at org.apache.spark.scheduler.ShuffleMapTask.runTask(ShuffleMapTask.scala:73) 
at org.apache.spark.scheduler.ShuffleMapTask.runTask(ShuffleMapTask.scala:41) 
at org.apache.spark.scheduler.Task.run(Task.scala:89) 
at org.apache.spark.executor.Executor$TaskRunner.run(Executor.scala:213) 
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) 
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) 
at java.lang.Thread.run(Thread.java:745) 

星火UI错误信息

我张贴如下: spark ui error information

+0

请发布完整的错误输出。错误究竟在哪里? – nmat

+0

你为什么认为这段代码导致错误?我没有看到任何会导致它的东西。 – puhlen

+0

发布了spark ui信息,显示了一些错误。 thts –

不知道代码的进一步的细节,我发现了两个可能的地方。

首先是模式匹配featureData。在进行映射时,您尝试与模式(psid: String, label: String, cate_features: ParArray[String], media_features: String)匹配,但未能处理模式与模式不匹配。

其次是toList方法。我想这是来自API的一种方法。你可以试试这个:flatMap(x => List(x._1,x._2)) - 我在飞机上写过,没有测试过。

+0

这是第一种模式,因为存在脏数据。 tks –

+0

@zhengqomo所以它的作品? –