Вложенный flatMap в Spark - PullRequest
0 голосов
/ 07 мая 2020

в приведенном ниже фрагменте кода, который я объявил, и rdd путем распараллеливания List (1,2,3,4), я хотел добавить List (1,2,3,4) к каждому элементу приведенного выше rdd. Я сделал это, используя вложенную функцию flatMap, поскольку она может возвращать несколько значений для каждого элемента RDD. Код выглядит следующим образом

val rand6=sc.parallelize(List(1,2,3,4))
val bv=sc.broadcast(List(5,6,7,8))
rand6.flatMap(s=>{
  val c=List(1,2,3,4)
  val a=List(s,c)
  val b=a.flatMap(r=>r)
  b
})

Но я получаю следующую ошибку:

command-1095314872161512:74: error: type mismatch;
 found   : Any
 required: scala.collection.GenTraversableOnce[?]
  val b=a.flatMap(r=>r)
                     ^

это проблема с синтаксисом, или мы не должны использовать flatMaps таким образом

было бы очень полезно, если бы кто-нибудь мог помочь мне понять это

1 Ответ

1 голос
/ 07 мая 2020

Попробуйте добавить тип, где это возможно, в свой код scala В зависимости от описания вашего вопроса было предложено решение ниже

import org.apache.spark.broadcast.Broadcast
import org.apache.spark.rdd.RDD

object RandomDF {

  def main(args: Array[String]): Unit = {

    val spark = Constant.getSparkSess
    val sc = spark.sparkContext
    val rand6 : RDD[Int] =sc.parallelize(List(1,2,3,4))
    val bv: Broadcast[List[Int]] =sc.broadcast(List(5,6,7,8))
    val output = rand6.map( (s : Int)=>{
      val c : List[Int] =List(1,2,3,4)
      val a = s :: c
//      val b = a.flatMap(r=>r)
//      b
      a
    }).collect().toList

    println(output)
  }

}

...