在Spark数据集api上使用Aggregate和group by

时间:2016-04-24 14:24:28

标签: java hadoop apache-spark

    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,但不知道如何继续使用它。 感谢

1 个答案:

答案 0 :(得分:0)

您可以将JavaRDD prdd 注册为表,然后在SQL语句中使用

`DataFrame schemaPeople = sqlContext.createDataFrame(prdd,Person.class); schemaPeople.registerTempTable(&#34;人&#34);

// SQL可以在已注册为表的RDD上运行。

DataFrame teenrs = sqlContext.sql(&#34; SELECT sum(age),sum(salary)FROM people group by name)

// SQL查询的结果是DataFrames并支持所有正常的RDD操作。

了解详情:http://spark.apache.org/docs/latest/sql-programming-guide.html#running-sql-queries-programmatically