在spark数据集api上使用aggregate和group-by

57hvy0tb  于 2021-05-29  发布在  Hadoop
关注(0)|答案(1)|浏览(357)
JavaRDD<Person> prdd = sc.textFile("c:\\fls\\people.txt").map(
          new Function<String, Person>() {
                public Person call(String line) throws Exception {
                  String[] parts = line.split(",");
                  Person person = new Person();
                  person.setName(parts[0]);
                  person.setAge(Integer.parseInt(parts[1].trim()));
                 person.setSal(Integer.parseInt(parts[2].trim()));
                  return person;
                }
              });

       RDD<Person>personRDD =  prdd.toRDD(prdd);
       Dataset<Person> dss= sqlContext.createDataset(personRDD ,               Encoders.bean(Person.class));
   GroupedDataset<Row, Person> dq=dss.groupBy(new Column("name"));

我必须根据数据集上的姓名计算年龄和薪资组的总和。请帮助如何查询数据集?我尝试使用groupeddataset,但不知道如何继续。谢谢

jdzmm42g

jdzmm42g1#

您可以将javardd prdd注册为一个表,然后在sql语句中使用
dataframe schemapeople=sqlcontext.createdataframe(prdd,person.class);schemapeople.registertemptable(“人”); //sql可以在已注册为表的RDD上运行。 dataframe=sqlcontext.sql(“按名称从人员组中选择sum(年龄)、sum(薪水)) //sql查询的结果是dataframe,支持所有正常的rdd操作
阅读更多:http://spark.apache.org/docs/latest/sql-programming-guide.html#running-以编程方式执行sql查询

相关问题