Csv 使用spark java的groupby
我可以使用spark从csv读取数据,但我不知道如何使用特定数组进行分组。我想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
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即可