sparksql 用反射的方式将rdd转换成dataset/dataframe
java
public class ReflectionDemo {
private static SparkConf conf = new SparkConf().setAppName("reflectdemo").setMaster("local");
private static JavaSparkContext jsc = new JavaSparkContext(conf);
private static SparkSession session = new SparkSession(jsc.sc());
public static void main(String[] args) throws AnalysisException {
// rdd
JavaRDD<String> rdd = jsc.textFile("./src/main/java/cn/tele/spark_sql/rdd2dataset/students.txt");
// 封装rdd
JavaRDD<Student> mapRdd = rdd.map(new Function<String, Student>() {
private static final long serialVersionUID = 1L;
@Override
public Student call(String v1) throws Exception {
String[] fields = v1.split(",");
Student student = new Student(Integer.valueOf(fields[0]), fields[1], Integer.valueOf(fields[2]));
return student;
}
});
// 通过反射的方式进行转换
Dataset<Row> dataset = session.createDataFrame(mapRdd, Student.class);
// 注册为临时信息表
// dataset.registerTempTable("students");
dataset.createOrReplaceTempView("studentsView");
Dataset<Row> result = session.sql("select * from studentsView where age<=18");
// result.show();
// 把dataset转换成rdd
JavaRDD<Student> javaRDD = result.javaRDD().map(new Function<Row, Student>() {
private static final long serialVersionUID = 1L;
@Override
public Student call(Row v1) throws Exception {
return new Student(v1.getAs("id"), v1.getAs("name"), v1.getAs("age"));
}
});
javaRDD.foreach(new VoidFunction<Student>() {
private static final long serialVersionUID = 1L;
@Override
public void call(Student t) throws Exception {
System.out.println(t);
}
});
session.stop();
jsc.close();
}
}
scala
case class Student(val id:Int,val name:String,val age:Int)
object ReflectionDemo {
def main(args: Array[String]): Unit = {
val conf = new SparkConf().setAppName("reflectdemo").setMaster("local")
val sc = new SparkContext(conf)
val sqlContext = new SQLContext(sc)
//导入隐式转换
import sqlContext.implicits._
//创建rdd
val rdd = sc.textFile("./src/main/scala/cn/tele/spark_sql/rdd2dataframe/students.txt", 2)
//转换rdd为dataframe
val dataframe = rdd.map(line => {
val arr = line.split(",");
new Student(arr(0).trim().toInt, arr(1).trim(), arr(2).trim().toInt)
}).toDF()
//创临时视图
dataframe.createOrReplaceTempView("students")
// dataframe.show()
val df = sqlContext.sql("select * from students where age<=18")
val newRdd = df.rdd.map(row => new Student(row.getAs[Int]("id"), row.getAs[String]("name"), row.getAs[Int]("age")))
newRdd.foreach(println(_))
}
}
sparksql 用反射的方式将rdd转换成dataset/dataframe的更多相关文章
- sparksql 动态设置schema将rdd转换成dataset/dataframe
java public class DynamicDemo { private static SparkConf conf = new SparkConf().setAppName("dyn ...
- Spark之 RDD转换成DataFrame的Scala实现
依赖 <dependency> <groupId>org.apache.spark</groupId> <artifactId>spark-sql_2. ...
- RDD转换成DataFrames
官方提供了2种方法 1.利用反射来推断包含特定类型对象的RDD的schema.这种方法会简化代码并且在你已经知道schema的时候非常适用. 先创建一个bean类 case class Person( ...
- 利用反射将Datatable、SqlDataReader转换成List模型
1. DataTable转IList public class DataTableToList<T>whereT :new() { ///<summary> ///利用反射将D ...
- 利用泛型和反射,管理配置文件,把Model转换成数据行,并把数据行转换成Model
利用泛型和反射,管理配置文件,把Model转换成数据行,并把数据行转换成Model 使用场景:网站配置项目,为了便于管理,网站有几个Model类来管理配置文件, 比如ConfigWebsiteMo ...
- [C#]Winform后台提交数据且获取远程接口返回的XML数据,转换成DataSet
#region 接口返回的Xml转换成DataSet /// <summary> /// 返回的Xml转换成DataSet /// </summary> /// <par ...
- TXT文件转换成DataSet数据集
/// <summary> /// TXT文件转换成DataSet数据集 /// </summary> /// <param name="FilePath&qu ...
- c#将List<T>转换成DataSet
/// <summary> /// List<T> 转换成DataSet /// </summary> /// &l ...
- Spark中RDD转换成DataFrame的两种方式(分别用Java和Scala实现)
一:准备数据源 在项目下新建一个student.txt文件,里面的内容为: ,zhangsan, ,lisi, ,wanger, ,fangliu, 二:实现 Java版: 1.首先新建一个s ...
随机推荐
- LED恒流设计
- 每天五个java相关面试题(3)
1. Servlet的生命周期是什么? 答: 第一次请求: 构造方法->init() -> service() -> doGet()/doPost() 以后的请求:service() ...
- Win10系统如何设置所有程序默认以管理员身份运行?
原文:Win10系统如何设置所有程序默认以管理员身份运行? 在win10系统中有些用户发现一些程序只有使用管理员身份运行能才打开,这样的话就感觉会麻烦很多,那么有没有办法设置所有程序都默认以管理员身份 ...
- c#.net公共帮助类
c#.net公共帮助类 比较全面的c#帮助类 比较全面的c#帮助类,日常工作收集,包括前面几家公司用到的,各式各样的几乎都能找到,所有功能性代码都是独立的类,类与类之间没有联系,可以单独引用至项目,分 ...
- 22、DMA驱动程序框架
一.使用DMA的优点及DMA支持的请求源(请求源是启动DMA传输的事件,可以认为是触发.它可以是软件,也可以是中断,或者外部事件) 1.DMA优点是其进行数据传输时不需要CPU的干涉,可以大大提高CP ...
- 轻松掌握ISO8583报文协议
http://www.itpub.net/thread-419521-1-1.html 我刚进入金融行业时,就知道了IS08583报文协议,我想可能我还没进入这个行业都已经听过了,可知ISO8583的 ...
- 【b601】能量项链
Time Limit: 1 second Memory Limit: 50 MB [问题描述] 在Mars星球上,每个Mars人都随身佩带着一串能量项链.在项链上有N颗能量珠.能量珠是一颗有头标记与尾 ...
- window下利用navicat访问Linux下的mariadb数据库
1.再Linux上成功安装mariadb数据库后,不管是在dos(敲命令mysql -h192.168.136.8 -uroot -p)下或者是navicat(创建连接)下连接mariadb数据库,会 ...
- 多线程之线程通信条件Condition二
接上一篇,实现Condition三个条件,有这样一个应用: 1. 有三个进程,第一个进程运行1次,第二个进程运行2次,第三个进程运行3次: 2. 先运行第二个进程,然后第一个,然后第三个: 3. 依 ...
- HttpClient基础教程 分类: C_OHTERS 2014-05-18 23:23 2600人阅读 评论(0) 收藏
1.HttpClient相关的重要资料 官方网站:http://hc.apache.org/ API:http://hc.apache.org/httpcomponents-client-4.3.x/ ...