как бороться с ошибкой SPARK-5063 в spark
я получаю сообщение об ошибке SPARK-5063 в строке println
val d.foreach{x=> for(i<-0 until x.length)
println(m.lookup(x(i)))}
д RDD[Array[String]]
м RDD[(String, String)]
. Есть ли способ напечатать так, как я хочу? или как я могу конвертировать d из RDD[Array[String]]
to Array[String]
?
2 ответов
Искра-5063 относится к лучшим сообщениям об ошибках при попытке вложить операции RDD, которые не поддерживаются.
это проблема юзабилити, а не функциональная. Первопричина гнездовой операций рдд и решением является разбить.
здесь мы пытаемся присоединиться dRDD
и mRDD
. Если размер mRDD
большой, a rdd.join
было бы рекомендуемым способом в противном случае, если mRDD
мал, т. е. вписывается в память каждого исполнителя, мы мог бы собрать его, транслировать его и сделать соединение "на стороне карты".
вступить
простое соединение будет выглядеть так:
val rdd = sc.parallelize(Seq(Array("one","two","three"), Array("four", "five", "six")))
val map = sc.parallelize(Seq("one" -> 1, "two" -> 2, "three" -> 3, "four" -> 4, "five" -> 5, "six"->6))
val flat = rdd.flatMap(_.toSeq).keyBy(x=>x)
val res = flat.join(map).map{case (k,v) => v}
если мы хотели бы использовать широковещательную передачу, нам сначала нужно собрать значение таблицы разрешения локально, чтобы b / c это всем исполнителям. Примечание RDD будет транслироваться должны поместиться в памяти водителя, а также каждого исполнителя.
карта-сторона присоединиться к трансляции переменная
val rdd = sc.parallelize(Seq(Array("one","two","three"), Array("four", "five", "six")))
val map = sc.parallelize(Seq("one" -> 1, "two" -> 2, "three" -> 3, "four" -> 4, "five" -> 5, "six"->6)))
val bcTable = sc.broadcast(map.collectAsMap)
val res2 = rdd.flatMap{arr => arr.map(elem => (elem, bcTable.value(elem)))}
этой RDD
нет SparkContext
. Это может произойти в следующих случаях:
RDD
преобразования и действия не вызываются драйвером,
но внутри другие
преобразования; например, rdd1.map(x => rdd2.values.count() * x)
является недействительным
потому что преобразование значений и count
действие не может быть выполнено внутри
rdd1.map
трансформация