【问题标题】:How to flatten list inside RDD?如何在 RDD 中展平列表?
【发布时间】:2018-07-25 05:09:00
【问题描述】:

是否可以在 RDD 中展平列表?例如转换:

 val xxx: org.apache.spark.rdd.RDD[List[Foo]]

到:

 val yyy: org.apache.spark.rdd.RDD[Foo]

如何做到这一点?

【问题讨论】:

    标签: scala apache-spark


    【解决方案1】:
    val rdd = sc.parallelize(Array(List(1,2,3), List(4,5,6), List(7,8,9), List(10, 11, 12)))
    // org.apache.spark.rdd.RDD[List[Int]] = ParallelCollectionRDD ...
    
    val rddi = rdd.flatMap(list => list)
    // rddi: org.apache.spark.rdd.RDD[Int] = FlatMappedRDD ...
    
    // which is same as rdd.flatMap(identity)
    // identity is a method defined in Predef object.
    //    def identity[A](x: A): A
    
    rddi.collect()
    // res2: Array[Int] = Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12)
    

    【讨论】:

      【解决方案2】:

      您只需要将其展平,但由于 RDD 上没有明确的“展平”方法,您可以这样做:

      rdd.flatMap(identity)
      

      【讨论】:

      • 谢谢。在这种情况下,rdd 是什么,identity 是什么?您的答案如何转化为我的问题中的示例?
      • @zork 在问题中应该是xxx.flatMap(identity)identity 是一个预定义的函数,正如它所说的,身份函数。不过,您可能已经知道这一点。
      猜你喜欢
      • 1970-01-01
      • 2019-11-28
      • 2014-12-17
      • 2019-08-08
      • 2016-06-24
      • 2019-12-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多