Получение первого элемента для кортежа для каждой строки в списке в Scala

#scala #apache-spark #pyspark #rdd

Вопрос:

Я хочу сделать это в Scala, но ничего не работает. В пыспарке это, очевидно, работает.

 from operator import itemgetter
rdd = sc.parallelize([(0, [(0,'a'), (1,'b'), (2,'c')]), (1, [(3,'x'), (5,'y'), (6,'z')])])
mapped = rdd.mapValues(lambda v: map(itemgetter(0), v))
 

Выход

 mapped.collect()
[(0, [0, 1, 2]), (1, [3, 5, 6])]
 

Ответ №1:

 val rdd = sparkContext.parallelize(List(
  (0, Array((0, "a"), (1, "b"), (2, "c"))),
  (1, Array((3, "x"), (5, "y"), (6, "z")))
))

rdd
  .mapValues(v => v.map(_._1))
  .foreach(v=>println(v._1 "; " v._2.toSeq.mkString(",") ))
 

Выход:

 0; 0,1,2
1; 3,5,6
 

Комментарии:

1. Верно, мне не хватало 1 аспекта.