我有一个包含键值对的JavaPairDStream.我需要将它转换为HashMap.我已经尝试通过调用"collectAsMap()"函数和它的工作方式对普通的JavaPairRDD做同样的事情但是当我试图在DStream上做同样的事情时,它失败了.
我试图通过使用"foreachRDD"函数将"JavaPairDStream"转换为"JavaPairRDD"来实现相同的目标,之后我在JavaPairRDD上使用"collectAsMap()"函数.
Mapvalue= new HashMap (); value=line.collectAsMap(); //Here "line" is a "JavaPairRDD ".
它不会给出任何编译错误但是当我运行程序时它会失败并抛出错误,如下所示.
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"时失败.如果我在任何地方出错,请告诉我.如果还有其他方式,请在此处发布.谢谢.