Вот

аюсь трансформироватьсяRDD(key,value) вRDD(key,iterable[value])То же, что и результат, возвращаемыйgroupByKey метод. Но, какgroupByKey не эффективно, я пытаюсь использоватьcombineByKey на RDD вместо этого, однако, это не работает. Ниже приведен код, используемый:

val data= List("abc,2017-10-04,15.2",
          "abc,2017-10-03,19.67", 
          "abc,2017-10-02,19.8",
          "xyz,2017-10-09,46.9", 
          "xyz,2017-10-08,48.4",
          "xyz,2017-10-07,87.5", 
          "xyz,2017-10-04,83.03", 
          "xyz,2017-10-03,83.41",
          "pqr,2017-09-30,18.18", 
          "pqr,2017-09-27,18.2", 
          "pqr,2017-09-26,19.2", 
          "pqr,2017-09-25,19.47", 
          "abc,2017-07-19,96.60",
          "abc,2017-07-18,91.68", 
          "abc,2017-07-17,91.55")
val rdd = sc.parallelize(templines)
val rows = rdd.map(line => {
  val row = line.split(",")
  ((row(0), row(1)), row(2))
})

// re partition and sort based key    
val op = rows.repartitionAndSortWithinPartitions(new CustomPartitioner(4))
val temp = op.map(f => (f._1._1, (f._1._2, f._2)))

val mergeCombiners = (t1: (String, List[String]), t2: (String, List[String])) => 
    (t1._1 + t2._1, t1._2.++(t2._2))
val mergeValue = (x: (String, List[String]), y: (String, String)) => {
  val a = x._2.+:(y._2)
  (x._1, a)
}

// createCombiner, mergeValue, mergeCombiners
val x = temp.combineByKey(
  (t1: String, t2: String) => (t1, List(t2)),
  mergeValue,
  mergeCombiners)

temp.combineByKey выдает ошибку времени компиляции, я не могу ее получить.

 mrsrinivas19 окт. 2017 г., 07:42
Что пытаетесь сделать? образец вывода для данного ввода?

Ответы на вопрос(1)

groupByKey даст вам, то вы должны абсолютно использоватьgroupByKey а не какой-то другой метод.reduceByKey, combineByKeyи т. д. только более эффективны по сравнению с использованиемgroupByKey затем с агрегацией (дает вам тот же результат, что и один изgroupBy методы могли бы дать).

Поскольку желаемый результат являетсяRDD[key,iterable[value]], составление списка самостоятельно или сдачаgroupByKey сделать это приведет к тому же объему работы. Нет необходимости в переопределенииgroupByKey себя. Проблема сgroupByKey это не его реализация, а лежит в распределенной архитектуре.

Для получения дополнительной информации относительноgroupByKey и эти типы оптимизаций, я бы рекомендовал прочитать большеВот.

Ваш ответ на вопрос