gpt4 book ai didi

java - 将 RDD 转换为键值对 RDD,值位于 List 中

转载 作者:行者123 更新时间:2023-11-30 06:09:17 27 4
gpt4 key购买 nike

我有一个pairRDD,其元组采用以下形式:

[(1,"b1","c1","d1","e1"), (2,"b2","c2","d2","e2"), ...

我想要的是将上面的内容转换为键值对 RDD,其中第一个字段将是键,第二个字段是字符串(值)列表。即我想将其转换为以下形式:

[(1,["b1","c1","d1","e1"]), (2,["b2","c2","d2","e2"]), ...

在此之后,是否可以访问我想要的任何字段?

例如,我可以访问元组 (1,["b1","c1","d1","e1"]),然后仅提取字段 d1

最佳答案

如果您有一个包含元组的 RDD,无论元组以何种方式表示,您都可以使用 mapToPair 将您的元组 RDD 转换为具有首选键和值的 PairRDD。

在 Java 8 中这可能是

JavaPairRDD<Integer,List<String>> r = 
rddOfTuples.mapToPair((t)->new Tuple2(
extractKey(t),
extractTuples(t)
));

请注意,此操作将引入随机播放。

显而易见的是,extractKeyextractTuples是要实现的方法,根据需要提取原始元组的部分。

由于我对 Scala 元组的了解有限,假设输入类似于 scala.Tuple5<String,Integer,Integer,Integer,Integer> ,这可能是:

JavaPairRDD<Integer,List<String>> r = 
rddOfTuples.mapToPair((t)->new Tuple2(
t._1,
Arrays.asList(t._2,t._3,t._4,t._6)
));

但是,如果您事先不知道 Tuple 的数量(元素数量) ,那么用 scala 术语来说,它是 Product 。要动态访问元素,您需要使用 Product界面,可选择:

  • int productArity()
  • Object productElement(int n)
  • Iterator<Object> productIterator()

然后它就成为常规的 Java 练习:

JavaPairRDD<Integer,List<String>> r = 
rddOfTuples.mapToPair((t)->{
List<String> l = new ArrayList<>(t.productArity()-1);
for (int i = 1; i < t.productArity(); i++) {
l.set(i-1,t.productElement(i));
}
return new Tuple2<>(t._1,l);
}));

我希望我一切顺利...上面的代码未经测试/未编译...因此,如果您可以让它与更正一起使用,那么请随意应用此答案中的更正...

关于java - 将 RDD 转换为键值对 RDD,值位于 List 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38295469/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com