Как выполнить преобразования в списке / массиве кортежей в Spark Scala RDD?

У меня есть список кортежей. Как я могу уменьшить целочисленные значения каждого кортежа?

val student=List((1,"akshay",60),(2,"salman",70),(3,"ranveer",50))
val student_rdd=sc.parallelize(student)
rdd1.reduce((a,b)=>(a._3+b._3)).collect

error: type mismatch;
found: Int
required: (Int, String, Int)
# apache-spark rdd
Источник
  • 0
    Что вы хотите сделать с первым и вторым столбцами? Например, (1, «акшай», 60) и (2, «салман», 70) должны стать (X, Y, 130). Что вы хотите, чтобы X и Y были там?
  • 0
    Вы просто ищете сумму всех значений в столбце 3?
  • 0
    Я хочу вычислить сумму, минимум, максимум, среднее значение последнего значения в кортеже.
Codelisting
за 0 против
Лучший ответ

Есть намного лучшие способы, чем использование RDD, но если вы хотите получить sum, min, max, avg за один проход с помощью reduce, тогда это сработает.

val res = {
  val a = student_rdd.map(r => (r._3, r._3, r._3, 1))
    .reduce((a, b) => (a._1 + b._1, Math.min(a._2, b._2), 
      Math.max(a._3, b._3), a._4 + b._4))
  a.copy(_4 = a._1 * 1.0 / a._4)
}

Это дает вам кортеж с (sum, min, max, avg)

за 2 против

Вы можете сопоставить значения перед уменьшением. Другие столбцы не нужны для восстановления и должны быть удалены перед восстановлением.

student_rdd.map(_._3).reduce(_+_)
  • 0
    ваше решение работает только для суммы, что, если мне нужны минимальные и максимальные значения?
  • 2
    затем используйте _ min _ или _ max _ внутри reduce
  • 0
    student_rdd.map ( ._3) .reduce (_min ) -> ошибка: не найдено: значение min
  • 2
    вам нужен пробел между _ и min
Codelisting
Популярные категории
На заметку программисту