![](/img/trans.png)
[英]How do I convert a java.util.Map to scala.collection.immutable.Map in Java?
[英]Using scala.collection.immutable.Map inside my java class
我從我的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
-您可能想要更改其余代碼以進行處理參數化映射以提高類型安全性。
您獲得java.util.Map
時應使用getJavaMap
方法 :
java.util.Map<T, U> currentBuffer = (java.util.Map<T, U>) first.getJavaMap(0)
請注意,這不是HashMap
初始化的值在update
Encoded
,而在get
解碼。 要對其進行修改,您必須進行復制。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.