reduceByKey不是成员

时间:2016-04-26 20:33:45

标签: scala apache-spark rdd

您好我的代码只是从文档中获取字数。我还需要使用map来生成输出之前查找数据值。这是代码。

   requests
    .filter(_.description.exists(_.length > 0))
    .flatMap { case request =>
      broadcastDataMap.value.get(request.requestId).map {
        data =>
          val text = Seq(
            data.name,
            data.taxonym,
            data.pluralTaxonym,
            request.description.get
          ).mkString(" ")
          getWordCountsInDocument(text).map { case (word, count) =>
            (word, Map(request.requestId -> count))
          }
      }
    }
    .reduceByKey(mergeMap)

错误消息是

reduceByKey is not a member of org.apache.spark.rdd.RDD[scala.collection.immutable.Map[String,scala.collection.immutable.Map[Int,Int]]]

我该如何解决这个问题?我需要调用getWordCountsInDocument。谢谢!

1 个答案:

答案 0 :(得分:3)

reduceByKey是PairRDDFunctions的成员,基本上它以RDD[(K, V)]的形式隐式添加到RDD中。您可能需要将结构展平为RDD[String, Map[Int,Int]]

如果您可以提供输入的类型(requestsbroadcastDataMapmergeMap),我们可以为该转换提供一些帮助。

从提供的类型中,假设getWordCountsInDocument的返回类型是某个Collection [(word,count:Int)]

改变:

broadcastDataMap.value.get(request.requestId).map {

broadcastDataMap.value.get(request.requestId).flatMap {

应解决问题。