簡體   English   中英

使用具有列表值的JavaPairRDD進行映射

[英]Map with JavaPairRDD with List values

我正在嘗試使用List值在JavaPairedRDD上進行迭代。 我想遍歷每個條目,但似乎我總是在遍歷值列表中的所有元素。 例如,我有一個pairedRDD,就像這樣。

[(0,[date, date, date]), (1,[str, str, str]), (2,[str, str, str]), (3,[str, int, str]), (4,[int, int, int]), (5,[float, float, int]), (6,[float, float, float])]

我想為Pair的每個條目提取值中最常見的元素。 所以對於這個,我要

[date, str, str, str, int, float, float]

我該怎么做呢? 我將列出一些嘗試過的嘗試,但是它們正在遍歷值中的所有元素。 我定義了一個函數,該函數返回list的最常見元素,並嘗試了以下方法:

JavaRDD<String> resultrdd = pair_rdd.map(e -> mostCommon(e._2));

和這個

JavaRDD<String> result = pair_rdd.flatMap(new FlatMapFunction<Tuple2<Integer, List<String>>, String>(){

    @Override
    public Iterator<String> call(Tuple2<Integer, List<String>> t) throws Exception {
            List<String> result = new ArrayList<String>();
            // TODO Auto-generated method stub
            List<String> type = t._2;
            result.add(mostCommon(type));
            return result.iterator();
        }

});

全部生成列表中的所有元素,因此

[date, str, str, str, int, float, float,date, str, int, str, int, float, float,date, str, str, str, int, int, float]

我認為e._2不是指整個列表,而是列表中的每個元素。 有什么幫助嗎?

編輯:這是我最常用的方法。 如果沒有“ None”,則只喜歡其他類型。

public static <String> String mostCommon(List<String> list) {
    Map<String, Integer> map = new HashMap<>();

    for (String t : list) {
        Integer val = map.get(t);
        map.put(t, val == null ? 1 : val + 1);
    }

    Entry<String, Integer> max = null;

    for (Entry<String, Integer> e : map.entrySet()) {
        if (e.getKey().equals("None")==false) {
            if (max == null || e.getValue() > max.getValue())
                max = e;
        }
    }
    if(max==null) {
        return (String) "None";
    }else {
        return max.getKey();
    }
}

您需要map ,而不是flatMap 您正在將元組轉換為單個元素,而不是拼合嵌套列表

並且您只需要return mostCommon(t._2) ,並假設返回一個字符串

我認為e._2不是指整個列表,

它必須是整個列表。 否則,它將無法編譯

List<String> type = t._2;

您的前7個元素是正確的,所以我認為您的RDD中有額外的數據

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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