【问题标题】:groupby with spark javagroupby 与 spark java
【发布时间】:2020-07-30 03:27:12
【问题描述】:

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

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));
                    }
                }
    );
}

【问题讨论】:

    标签: csv apache-spark java-8


    【解决方案1】:

    Spark 直接提供 group by 功能:

    JavaPairRDD<String, Iterable<DataModel>> groupedRdd = rdd.groupBy(dataModel -> dataModel.getName());
    

    这将返回一对 rdd,其中键是名称(由提供给分组依据的 lambda 确定),值是具有该名称的数据模型。

    如果要按逻辑改变分组,只需要提供对应的lambda即可。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-06
      • 2014-09-27
      • 2018-10-23
      相关资源
      最近更新 更多