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

时间:2017-12-11 15:30:11

标签: java apache-spark spark-dataframe

我尝试使用Dataset的groupByKey方法。我无法弄清楚问题,无法找到 使用groupByKey 的任何工作示例。

所以让我指出一些观点,我在解决方案中寻找:

  1. 我想使用groupByKey - 有很多使用groupBy的例子("键")。agg(功能),我知道但不想使用它们(教育目的)
  2. 我想使用Java - 很多例子都使用Scala,再次不想要它。
  3. 该函数最好应写为lambda表达式。
  4. 这是我做的:

    contentDiv

    我得到的错误:

    1. 模糊方法调用 - IDE显示有关Function1和MapFunction匹配的警告。
    2. 无法解析getString和getInt
    3. 我无法显示/打印结果

2 个答案:

答案 0 :(得分:3)

使用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));

答案 1 :(得分:0)

出现此错误是因为groupByKey有两个重叠的实现。这些方法之一将MapFunction作为第一个参数,第二个方法将Function1作为一个参数。您的lambda代码可以同时投射到这两个代码。因此,您应该明确声明您的意图。投射是一个简单的解决方案:

df.groupByKey(row -> (MapFunction<Row, Bean>) new Bean(row.getString(0), row.getInt(1))
    , Encoders.bean(Bean.class));