簡體   English   中英

將自定義對象映射為Apache Spark中DataFrame的鍵

[英]Map with custom object as key to DataFrame in Apache Spark

我在從RDD創建DataFrame時遇到麻煩。

首先,我使用Spark創建我正在使用的數據(通過對工作人員的模擬),並得到Report對象。

這些Report對象由兩個HashMap組成,其中兩個鍵和自定義鍵之間的鍵幾乎相同,值是Integer / Double。 值得注意的是,我目前需要這些鍵和映射來在仿真過程中有效地添加和更新值,因此將其更改為“平面”對象可能會失去很多效率。

public class Key implements Serializable, Comparable<Key> {

    private final States states;
    private final String event;
    private final double age;

    ...
}

而國家是

public class States implements Serializable, Comparable<States> {

    private String stateOne;
    private String stateTwo;

    ...
}

狀態曾經是枚舉,但事實證明,DataFrame不喜歡那樣。 (仍從枚舉設置字符串,以確保值正確。)

問題是我想將這些映射轉換為DataFrames,以便可以使用SQL等操作/過濾數據。

我可以通過創建一個像這樣的Bean來創建DataFrames

public class Event implements Serializable {

    private String stateOne;
    private String stateTwo;

    private String event;
    private Double age;

    private Integer value;

    ...
}

使用getter和setter方法,但是有沒有辦法我可以僅使用Tuple2(或類似方法)來創建DataFrame? 哪一個甚至可以給我一個很好的數據庫結構?

我已經試過像這樣使用Tuple2

JavaRDD<Report> reports = dataSet.map(new SimulationFunction(REPLICATIONS_PER_WORKER)).cache();

JavaRDD<Tuple2<Key, Integer>> events = reports.flatMap(new FlatMapFunction<Report, Tuple2<Key, Integer>>() {
    @Override
    public Iterable<Tuple2<Key, Integer>> call(Report t) throws Exception {
        List<Tuple2<Key, Integer>> list = new ArrayList<>(t.getEvents().size());
        for(Entry<Key, Integer> entry : t.getEvents().entrySet()) {

            list.add(new Tuple2<>(entry.getKey(), entry.getValue()));
        }

        return list;
    }
});

DataFrame schemaEvents = sqlContext.createDataFrame(events, ????);

但是我不知道問號放在哪里。

希望我已經足夠清楚了,您可以對此有所了解。 先感謝您!

正如zero323所說,不可能做我想做的事情。 從現在開始,我將堅持使用這些豆子。

暫無
暫無

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

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