簡體   English   中英

在我的java類中使用scala.collection.immutable.Map

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM