And*_*eas 7 java group-by dataset apache-spark apache-spark-2.0
我有一个包含如下数据的数据集:
|c1| c2|
---------
| 1 | a |
| 1 | b |
| 1 | c |
| 2 | a |
| 2 | b |
Run Code Online (Sandbox Code Playgroud)
...
现在,我希望将数据分组如下(col1:String Key,col2:List):
| c1| c2 |
-----------
| 1 |a,b,c|
| 2 | a, b|
...
Run Code Online (Sandbox Code Playgroud)
我认为使用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();
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
5586 次 |
最近记录: |