Scala技术问询:如何提取列表或RDD数组中的元组?
在Scala中提取RDD列表内的元组
嘿,我看你手里的RDD是(Int, Array[(Int, Int, String, Float)])这种结构,想要把数组里的Tuple4元组提取出来对吧?这里给你几种实用的处理方式:
1. 直接提取所有元组(丢弃原键)
如果不需要保留前面的Int键,只想把所有Tuple4元素单独拿出来,可以用flatMap来展开数组:
// 把数组里的每个元组都拆出来,生成只包含Tuple4的RDD val allTuplesRDD = topWithKeysSorted.flatMap { case (_, tupleArray) => tupleArray } // 验证结果 allTuplesRDD.take(10).foreach(println)
2. 保留原键,展开为键与单个元组的配对
要是想保留原来的Int键,让每个键对应数组里的每一个元组,用flatMapValues会更简洁:
// 展开数组,生成(Int, Tuple4[Int, Int, String, Float])类型的RDD val keyTupleRDD = topWithKeysSorted.flatMapValues(tupleArray => tupleArray) // 或者用模式匹配的写法也能达到同样效果: val keyTupleRDD = topWithKeysSorted.flatMap { case (key, tupleArray) => tupleArray.map(tuple => (key, tuple)) }
小提示:查看数组内的具体元组内容
你之前打印的时候看到[Lscala.Tuple4;@xxxx这种输出,是因为Scala默认直接打印数组时,会输出它的类型和哈希值,而不是内部元素。如果想看到数组里的元组详情,可以这样打印:
topWithKeysSorted.take(10).foreach { case (key, tupleArray) => println(s"Key: $key, Tuples: ${tupleArray.mkString("[", ", ", "]")}") }
内容的提问来源于stack exchange,提问作者Choix
相关产品推荐
相关产品推荐

