在Scala中为列表中的每一行获取元组的第一项

Posted

技术标签:

【中文标题】在Scala中为列表中的每一行获取元组的第一项【英文标题】:Getting the first item for a tuple for each row in a list in Scala 【发布时间】:2021-12-03 16:56:10 【问题描述】:

我希望在 Scala 中执行此操作,但没有任何效果。在 pyspark 中它显然有效。

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 个方面。

以上是关于在Scala中为列表中的每一行获取元组的第一项的主要内容,如果未能解决你的问题,请参考以下文章

获取包含元组的列表的索引,其中元组的第一个元素与模式匹配

在单个 SELECT 中获取某个组的第一项

如何在 Scala/Spark 中为数据框中的每一行编写一个 Json 文件并重命名文件

在 Swift 中获取列表的第一项 [关闭]

根据元组的值对元组列表中的重复元组进行平均

如何在for和if循环中获取spark scala数据帧的最后一行的第一列值