【问题标题】:RDD map function working differentlyRDD map 函数的工作方式不同
【发布时间】:2016-12-24 22:35:31
【问题描述】:

我有下面的代码,一般来说,映射函数是一个高阶函数,它在其参数中接受一个函数并使用该函数评估元素。 但在这种情况下, map 不是一个函数,而是一个 Map 类型。无法理解地图功能的工作原理?

Spark context available as sc (master = yarn-client, app id = application_1473775536920_2711).
SQL context available as sqlContext.

scala> val pws = Map("Apache Spark" -> "http://spark.apache.org/", "Scala" -> "http://www.scala-lang.org/")
pws: scala.collection.immutable.Map[String,String] = Map(Apache Spark -> http://spark.apache.org/, Scala -> http://www.scala-lang.org/)

scala> val websites = sc.parallelize(Seq("Apache Spark", "Scala")).map(pws).collect
16/09/23 02:50:15 WARN util.ClosureCleaner: Expected a closure; got scala.collection.immutable.Map$Map2
[Stage 0:>                                                          (0 + 0) / 2]16/09/23 02:50:31 WARN cluster.YarnScheduler: Initial job has not accepted any resources; check your cluster UI to ensure that workers are registered and have sufficient resources
websites: Array[String] = Array(http://spark.apache.org/, http://www.scala-lang.org/)

【问题讨论】:

    标签: scala apache-spark rdd


    【解决方案1】:

    特征Map[A, +B] 扩展了特征Function1[-T1, +R]。换句话说,Map 一个函数。在您的情况下,您有一个 Map[String, String],这意味着您的地图将有 def apply(arg: String): String,这适用于您的 RDD 中的所有元素。

    因此,即使在普通的 Scala 中,您也可以执行类似的操作

    val m = Map(("a" -> "b"), ("c" -> "d"))
    val s = Seq("a", "c")
    
    s.map(m)
    res0: Seq[String] = List(b, d)
    

    为此编译ms中的类型需要匹配。

    【讨论】:

      猜你喜欢
      • 2015-12-07
      • 1970-01-01
      • 2013-12-09
      • 2020-11-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-24
      • 2017-08-23
      相关资源
      最近更新 更多