我从Java代码中获得了以下异常。
java.lang.ClassCastException: scala.collection.immutable.Map$Map1 cannot be cast to java.util.HashMap
at au.com.vroc.udf.medianUDF.update(medianUDF.java:79)
当我将缓冲区强制转换为java.utill的HashMap时,我的spark应用程序中出现错误。这是我的代码:
public void update(MutableAggregationBuffer buffer, Row input) {
if (!input.isNullAt(0)) {
HashMap currentBuffer=(HashMap) buffer.get(0);//getting exception here
//HashMap currentBuffer=new HashMap();
currentBuffer.put(input.getLong(0), input.getDouble(0));
//currentBuffer.add(currentMap);
buffer.update(0, currentBuffer);
}
}
我想我必须在Java类中使用“ scala.collection.immutable.Map $ Map1”来代替Java hashmap。我可以使用“ JavaConversions”命名空间中的任何工具吗?
Anyhep将不胜感激!
最简单的方法可能是使用Scala转换器。
它应该看起来像这样(未经测试,但经过类型检查):
import scala.collections.JavaConverters
java.util.Map currentBuffer = JavaConverters.mapAsJavaMapConverter(buffer.get(0)).asJava();
请注意,它返回类型参数化的映射(即java.util.Map<K, V>
),而不是java.util.HashMap
示例中未参数化的映射-您可能希望更改其余代码以在参数化的映射上工作,以提高类型安全性。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句