下面给大家介绍通过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;
}
}
}