【问题标题】:Nested flatMap in sparkSpark中的嵌套flatMap
【发布时间】:2020-08-22 21:14:06
【问题描述】:

在下面给定的代码片段中,我通过并行化 List(1,2,3,4) 来声明和 rdd,我想要做的是将 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

如果有人能帮助我理解这一点,那将非常有帮助

【问题讨论】:

  • 正在寻找什么输出?
  • 能否请您回答或解释一下为什么它不起作用?

标签: scala apache-spark flatmap


【解决方案1】:

尽量在你的 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)
  }

}

【讨论】:

    猜你喜欢
    • 2021-11-25
    • 2016-02-08
    • 1970-01-01
    • 2014-07-12
    • 1970-01-01
    • 2021-08-12
    • 1970-01-01
    • 2017-04-02
    • 1970-01-01
    相关资源
    最近更新 更多