spark之DataFrame 通过反射创建

来源:互联网 发布:php招聘网站源码 编辑:程序博客网 时间:2024/04/29 08:11

下面给大家介绍通过javaBeas反射创建DataFrame。
一,准备数据文件:
这里写图片描述

二,过程分析:

    1,根据数据文件创建对应的javaBean,设置对应的set和get方法。    2,读取text文件通过map函数将文件内容分割,设置到person并返回。    3,通过返回的RDD和javaBean反射创建DataFrame。并设置表名。    4,条件查旬从该表中筛选想要的信息。返回的也是一个DataFrame.    5,再次通过map算子将teenagers转化为RDD将结果输出注意在DataFrame转RDD时的map泛型的第一个参数是row,对应表的一行数据。通过getString指定位置取对应的参数。

三,代码展示:

import org.apache.spark.SparkConf;import org.apache.spark.api.java.JavaRDD;import org.apache.spark.api.java.JavaSparkContext;import org.apache.spark.api.java.function.Function;import org.apache.spark.sql.DataFrame;import org.apache.spark.sql.Row;import org.apache.spark.sql.SQLContext;public class SparkrefleCttest2 {    public static void main(String[] args) {        SparkConf conf=new SparkConf();        conf.set("spark.testing.memory", "269522560000");        JavaSparkContext sc=new JavaSparkContext("local","SparkrefleCttest2",conf);        System.out.println("与spark的连接建立成功"+conf);        SQLContext sqlContext=new org.apache.spark.sql.SQLContext(sc);        System.out.println("sqlContext建立成功" + sqlContext);        //读取text文件通过map函数将文件内容分割,设置到person并返回        JavaRDD<Person> people=sc.textFile("hdfs://192.168.61.128:9000/spark001/sparkreflect.txt").map(new Function<String,Person>(){            public Person call(String line) throws Exception {                String[] ss=line.split(",");                Person person=new Person();                person.setName(ss[0]);                person.setAge(Integer.parseInt(ss[1]));                return person;            }});        //通过javaBeans 即person创建DataFrame        DataFrame schemaPeople=sqlContext.createDataFrame(people, Person.class);        schemaPeople.registerTempTable("people");//创建表名        //从创建好的表中条件查旬信息        DataFrame teenagers=sqlContext.sql("select name from people where age>13 and age<22");        //再次通过map算子将teenagers转化为RDD将结果输出        //注意在DataFrame转RDD时的map泛型的第一个参数是row,对应表的一行数据        List<String> teenagerNames =teenagers.javaRDD().map(new Function<Row,String>(){            public String call(Row row) throws Exception {                String name=row.getString(0);                return "Name: "+name;            }}).collect();        for(String name:teenagerNames){            System.out.println("符合条件的人:"+name);        }    }    public static class Person implements Serializable{        private String name;        private int age;        public String getName() {            return name;        }        public void setName(String name) {            this.name = name;        }        public int getAge() {            return age;        }        public void setAge(int age) {            this.age = age;        }    }}
0 0
原创粉丝点击