Spark数据集groupByKey不起作用(Java)

我尝试使用数据集的groupByKey方法.我无法解决问题,也找不到任何使用groupByKey的有效示例.

因此,让我指出要点,我正在寻找解决方案:

>我想使用groupByKey-有很多使用groupBy(“ key”).agg(function)的示例,我知道但不想使用它们(用于教育目的)
>我想使用Java-许多示例都使用Scala,但又不想这么做.
>最好将函数编写为lambda表达式.

这是我所做的:

//Inner class
public static class Bean implements Serializable {
    private static final long serialVersionUID = 1L;
    private String k;
    private int something;

    public Bean(String name, int value) {
        k = name;
        something = value;
    }

    public String getK() {return k;}
    public int getSomething() {return something;}

    public void setK(String k) {this.k = k;}
    public void setSomething(int something) {this.something = something;}
}

//usage
List<Bean> debugData = new ArrayList<Bean>();
debugData.add(new Bean("Arnold", 18));
debugData.add(new Bean("Bob", 7));
debugData.add(new Bean("Bob", 13));
debugData.add(new Bean("Bob", 15));
debugData.add(new Bean("Alice", 27));
Dataset<Row> df = sqlContext.createDataFrame(debugData, Bean.class);
df.groupByKey(row -> {new Bean(row.getString(0), row.getInt(1));}, Encoders.bean(Bean.class)); //doesn't compile

我得到的错误:

>模棱两可的方法调用-IDE将显示有关Function1和MapFunction匹配的警告.
>无法解析getString和getInt
>我无法显示/打印结果

最佳答案
使用Java 8 Lambda

df.groupByKey(row -> {
            return new Bean(row.getString(0), row.getInt(1));
        }, Encoders.bean(Bean.class));

使用MapFunction

df.groupByKey(new MapFunction<Row, Bean>() {
            @Override
            public Bean call(Row row) throws Exception {
                return new Bean(row.getString(0), row.getInt(1));
            }
        }, Encoders.bean(Bean.class));

转载注明原文:Spark数据集groupByKey不起作用(Java) - 代码日志