apache-spark – 如何将JavaPairRDD转换为HashMap

栏目: Java · 发布时间: 5年前

内容简介:翻译自:https://stackoverflow.com/questions/25230363/how-to-convert-javapairrdd-into-hashmap
我有一个包含键值对的 Java

PairDStream.我需要将它转换为HashMap.我尝试通过调用“collectAsMap()”函数和它的工作方式对普通的JavaPairRDD做同样的事情但是当我在DStream上尝试做同样的事情时,它失败了.

我试图通过使用“foreachRDD”函数将“JavaPairDStream”转换为“JavaPairRDD”来实现相同的目标,之后我在JavaPairRDD上使用“collectAsMap()”函数.

Map<String,String> value= new HashMap<String,String>();
            value=line.collectAsMap();

//Here "line" is a "JavaPairRDD<String,String>".

它不会给出任何编译错误但是当我运行程序时它会失败并抛出错误,如下所示.

java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to [Lscala.Tuple2;
    at org.apache.spark.rdd.PairRDDFunctions.collectAsMap(PairRDDFunctions.scala:447)
    at org.apache.spark.api.java.JavaPairRDD.collectAsMap(JavaPairRDD.scala:464)
    at attempt1.CSV_Spark$3.call(CSV_Spark.java:109)
    at attempt1.CSV_Spark$3.call(CSV_Spark.java:1)

我不确定我的方法是否正确.普通的“JavaPairRDD”和“foreachRDD”函数创建的“JavaPairRDD”之间有什么区别吗?为什么相同的方法适用于普通的“JavaPairRDD”,但是当我将它应用于通过在JavaPairDStream上应用“foreachRDD”函数创建的“JavaPairRDD”时失败.如果我在任何地方出错,请告诉我.如果还有其他方式,请在此处发布.谢谢.

在编译时,接受向下转换,因为Map和HashMap都在相同的继承中.虽然我们没有得到任何编译时错误,但我们将在运行时获得ClassCastException.要避免此问题,您可以尝试这样做:

码:

JavaPairRDD<K, V> javaRDDPair  = rddInstance.mapToPair(new PairFunction<T, K, V>() {
   @Override
    public Tuple2<K, V> call(final T value) {
    // statements 
    // operations on value
    return new Tuple2<K, V>(KTypeValue, VTypeValue);
    }
    });

    Map<K,V> map =  javaRDDPair.collectAsMap();
    HashMap<K,V> hmap = new HashMap<K,V>(map);

注意:rddInstance是JavaRDD类型的对象.

假设我们有一个JavaRDD,其中包含T类型的值.

在转换它时,我们创建JavaPairRDD,它保存<K,V>对.

现在的要求是将JavaPairRDD转换为HashMap对象,以便在应用程序中进行进一步的计算.使用collectAsMap方法并将其结果分配给Map对象本身.之后,您可以通过传递Map实例来创建HashMap.

翻译自:https://stackoverflow.com/questions/25230363/how-to-convert-javapairrdd-into-hashmap


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

操作系统基础教程

操作系统基础教程

戴维斯 / 第1版 (2006年7月1日) / 2006-7 / 34.0

这是一本关于操作系统基本原理的教科书,其最大特点就是从操作系统的分层概念出发,深入浅出地介绍了操作系统的基本概念和基本框架。本书可以作为高等院校非计算机专业相关课程的教材或参考书,也适合具有高中以上数学基础的计算机用户自学,还可以作为社会上计算机培训机构的教材。对所有想了解计算机操作系统,但又不需要或不打算深入学习其理论和实现细节的读者来说,本书是一本极具价值的入门指导书。一起来看看 《操作系统基础教程》 这本书的介绍吧!

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具