引起:java.lang.ArrayIndexOutOfBoundsException spark flatMap

时间:2017-01-23 04:27:51

标签: scala apache-spark

相关代码如下:

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。我认为存在一个访问数组的地方。我不熟悉斯卡拉。欢迎任何帮助。 TKS。

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)

Spark UI错误信息

我发布如下: spark ui error information

1 个答案:

答案 0 :(得分:1)

在不知道代码的更多细节的情况下,我发现了两个可能的地方。

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

其次是toList方法。我认为这是API的一种方法。你可以尝试一下这个:flatMap(x => List(x._1,x._2)) - 我在飞行中写了它,没有测试。