java - 使用 Java 在 Spark 2.0 中使用数据集的 GroupByKey

标签 java apache-spark group-by dataset apache-spark-2.0

我有一个包含如下数据的数据集:

|c1| c2|
---------
| 1 | a |
| 1 | b |
| 1 | c |
| 2 | a |
| 2 | b |

...

现在,我想对数据进行分组,如下所示(col1: String Key, col2: List):

| c1| c2 |
-----------
| 1 |a,b,c|
| 2 | a, b|
...

我认为使用 goupByKey 是一个足够的解决方案,但我找不到任何示例,说明如何使用它。

任何人都可以帮助我找到使用 groupByKey 或使用任何其他转换和操作组合的解决方案,以通过使用数据集而不是 RDD 来获取此输出吗?

最佳答案

这是带有数据集的 Spark 2.0 和 Java 示例。

public class SparkSample {
    public static void main(String[] args) {
    //SparkSession
    SparkSession spark = SparkSession
            .builder()
            .appName("SparkSample")
            .config("spark.sql.warehouse.dir", "/file:C:/temp")
            .master("local")
            .getOrCreate();     
    //input data
    List<Tuple2<Integer,String>> inputList = new ArrayList<Tuple2<Integer,String>>();
    inputList.add(new Tuple2<Integer,String>(1, "a"));
    inputList.add(new Tuple2<Integer,String>(1, "b"));
    inputList.add(new Tuple2<Integer,String>(1, "c"));
    inputList.add(new Tuple2<Integer,String>(2, "a"));
    inputList.add(new Tuple2<Integer,String>(2, "b"));          
    //dataset
    Dataset<Row> dataSet = spark.createDataset(inputList, Encoders.tuple(Encoders.INT(), Encoders.STRING())).toDF("c1","c2");
    dataSet.show();     
    //groupBy and aggregate
    Dataset<Row> dataSet1 = dataSet.groupBy("c1").agg(org.apache.spark.sql.functions.collect_list("c2")).toDF("c1","c2");
    dataSet1.show();
    //stop
    spark.stop();
  }
}

关于java - 使用 Java 在 Spark 2.0 中使用数据集的 GroupByKey,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39390912/

相关文章:

java - 按键时的 JTable 编辑

c# - Linq 选择新对象

python - 使用 Pandas,如何删除每组的最后一行?

sql - 为什么SQL迫使我在GROUP BY子句中重复执行SELECT子句中所有未聚合的字段?

python - Spark 中的无序集或类似集?

apache-spark - Apache Spark 在本地模式下性能下降

java - Apache Solr 查询计算价格中位数

java - 在 Spring mvc 中使用 html 文件发送 dto

Java TreeMap 自定义比较器奇怪的行为

Spark 数据框列上的正则表达式