![](/img/trans.png)
[英]Java syntax for iterating through array of objects like “for (String key : {”key1“, ”key2“})”
[英]Java spark groupByKey with key1 and do aggregateByKey with key2 on groupedRDD
我正在嘗試做一個簡單的Java Spark應用程序,該應用程序執行以下操作
輸入數據csv格式:key1,key2,data1,data2
基本上我想在這里做的是
首先,我通過key1映射每行,然后在該rdd上執行groupByKey操作。
JavaRDD<String> viewRdd = sc.textFile("testfile.csv", 1);
JavaPairRDD<String, String> customerIdToRecordRDD = viewRdd
.mapToPair(w -> new Tuple2<String, String>(w.split(",")[0], w));
JavaPairRDD<String, Iterable<String>> groupedByKey1RDD = customerIdToRecordRDD.groupByKey();
System.out.println(customerIdToRecordGropedRDD.count());
現在我的問題是,我需要對來自groupedByKey1RDD的每個組上的key2做一個generateByKey。 有什么方法可以將Iterable轉換為RDD嗎? 還是我在這里想念東西。 我是新來的,任何幫助
輸入和預期輸出示例:
id_1,time0,10,10
id_2,time1,0,10
id_1,time1,11,10
id_1,time0,1,10
id_2,time1,10,10
輸出按第一列分組,然后按第二列聚合(聚合邏輯是簡單地將column3和column4相加):
id_1 : time0 : { sum1 : 11, sum2 : 20} ,
time1 : { sum1 : 11, sum2 : 10}
id_2 : time1 : { sum1 : 10, sum2 : 20}
這是使用Spark 2.0和Dataframe的解決方案。 如果您仍然想使用RDD,請告訴我。
public class SparkGroupBySample {
public static void main(String[] args) {
//SparkSession
SparkSession spark = SparkSession
.builder()
.appName("SparkGroupBySample")
.master("local")
.getOrCreate();
//Schema
StructType schema = new StructType(new StructField[] {
new StructField("key1", DataTypes.StringType, true, Metadata.empty()),
new StructField("key2", DataTypes.StringType, true, Metadata.empty()),
new StructField("data1", DataTypes.IntegerType, true, Metadata.empty()),
new StructField("data2", DataTypes.IntegerType, true, Metadata.empty())});
//Read csv
Dataset<Row> dataSet = spark.read().format("csv").schema(schema).option("header", "true").option("delimiter", ",").load("c:\\temp\\sample.csv");
dataSet.show();
//groupBy and aggregate
Dataset<Row> dataSet1 = dataSet.groupBy("key1","key2").sum("data1","data2").toDF("key1","key2","sum1","sum2");
dataSet1.show();
//stop
spark.stop();
}
}
這是輸出。
+----+-----+----+----+
|key1| key2|sum1|sum2|
+----+-----+----+----+
|id_1|time1| 11| 10|
|id_2|time1| 10| 20|
|id_1|time0| 11| 20|
+----+-----+----+----+
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.