Csv 使用spark java的groupby

Csv 使用spark java的groupby,csv,apache-spark,java-8,Csv,Apache Spark,Java 8,我可以使用spark从csv读取数据,但我不知道如何使用特定数组进行分组。我想groupBy“Name”。这是我的代码: public class readspark { public static void main(String[] args) { final ObjectMapper om = new ObjectMapper(); System.setProperty("hadoop.home.dir", "D:\\Task\\winutil

我可以使用spark从csv读取数据,但我不知道如何使用特定数组进行分组。我想
groupBy
“Name”。这是我的代码:

public class readspark {
public static void main(String[] args) {
    final ObjectMapper om = new ObjectMapper();
    System.setProperty("hadoop.home.dir", "D:\\Task\\winutils-master\\hadoop-3.0.0");
    SparkConf conf = new SparkConf()
            .setMaster("local[3]")
            .setAppName("Read Spark CSV")
            .set("spark.driver.host", "localhost");
    JavaSparkContext jsc = new JavaSparkContext(conf);
    JavaRDD<String> lines = jsc.textFile("D:\\Task\\data.csv");
    JavaRDD<DataModel> rdd = lines.map(new Function<String, DataModel>() {
        @Override
        public DataModel call(String s) throws Exception {
            String[] dataArray = s.split(",");
            DataModel dataModel = new DataModel();
         
            dataModel.Name(dataArray[0]);
            dataModel.ID(dataArray[1]);
            dataModel.Addres(dataArray[2]);
            dataModel.Salary(dataArray[3]);
           
            return dataModel;
        }
    });
    rdd.foreach(new VoidFunction<DataModel>() {
                    @Override
                    public void call(DataModel stringObjectMap) throws Exception {
                        System.out.println(om.writeValueAsString(stringObjectMap));
                    }
                }
    );
}
公共类readspark{
公共静态void main(字符串[]args){
最终ObjectMapper om=新ObjectMapper();
System.setProperty(“hadoop.home.dir”,“D:\\Task\\winutils master\\hadoop-3.0.0”);
SparkConf conf=新的SparkConf()
.setMaster(“本地[3]”)
.setAppName(“读取Spark CSV”)
.set(“spark.driver.host”、“localhost”);
JavaSparkContext jsc=新的JavaSparkContext(conf);
JavaRDD lines=jsc.textFile(“D:\\Task\\data.csv”);
JavaRDD=lines.map(新函数(){
@凌驾
公共数据模型调用(字符串s)引发异常{
字符串[]dataArray=s.split(“,”);
DataModel DataModel=新的DataModel();
dataModel.Name(dataArray[0]);
ID(dataArray[1]);
Addres(dataArray[2]);
工资(dataArray[3]);
返回数据模型;
}
});
foreach(新的VoidFunction(){
@凌驾
公共void调用(DataModel stringObjectMap)引发异常{
System.out.println(om.writeValueAsString(stringObjectMap));
}
}
);
}

Spark直接提供分组功能:

JavaPairRDD<String, Iterable<DataModel>> groupedRdd = rdd.groupBy(dataModel -> dataModel.getName());
javapairddgroupedrdd=rdd.groupBy(dataModel->dataModel.getName());
这将返回一对rdd,其中键是名称(由提供给GROUPBY的lambda确定),值是具有该名称的数据模型

如果要按逻辑更改组,只需提供相应的lambda即可