分别用反射、编程接口的方式创建DataFrame
1、通过反射的方式 使用反射来推断包含特定数据类型的RDD,这种方式代码比较少,简洁,只要你会知道元数据信息时什么样,就可以使用了
代码如下:
import org.apache.spark.sql.{SQLContext, SaveMode}
import org.apache.spark.{SparkConf, SparkContext}
object RDD2DataFrame {
def main(args: Array[String]): Unit = {
val conf = new SparkConf().setAppName("DF").setMaster("local")
val sc = new SparkContext(conf)
val sQLContext = new SQLContext(sc)
//创建一个普通的RDD
val rdd = sc.textFile("D:\\data\\spark\\students.txt")
var rdd2= rdd.map(t=>{
val lines = t.split(",")
studented(lines(0).toInt,lines(1),lines(2).toInt)
})
//注意:需要导入隐式转换
import sQLContext.implicits._
val df = rdd2.toDF()
//注册临时表
df.registerTempTable("student")
val dfs = sQLContext.sql("select name from student where age>18")
dfs.write.mode(SaveMode.Append).text("D:\\result\\Rdd2DataFrame")
}
}
case class studented(id:Int,name:String,age:Int)
2、通过编程接口的方式 你可以自己动态的构建一份元数据,这种代码比较多,但是适合你不知道元数据的时候使用,一般都用这种方式
代码如下:
object RDD2DataFrame2 {
def main(args: Array[String]): Unit = {
val conf = new SparkConf().setAppName("df02").setMaster("local")
val sc = new SparkContext(conf)
val sqlContext = new SQLContext(sc)
//val df = sqlContext.read.json("D:\\data\\spark\\students.json")
val rdd = sc.textFile("D:\\data\\spark\\students.txt")
val rowRdd = rdd.map(t => {
val str = t.split(",")
Row(str(0).toInt, str(1), str(2).toInt)
})
//构建StructType
val structType = StructType(Array(StructField("id", IntegerType, true),
StructField("name", StringType, true),
StructField("age", IntegerType, true)
))
//创建DataFrame
val df: DataFrame = sqlContext.createDataFrame(rowRdd,structType)
df.registerTempTable("stu")
val sql = sqlContext.sql("select * from stu where age>17")
sql.rdd.foreach(println)
}
}
分别用反射、编程接口的方式创建DataFrame的更多相关文章
- JAVA SparkSQL初始和创建DataFrame的几种方式
建议参考SparkSQL官方文档:http://spark.apache.org/docs/latest/sql-programming-guide.html 一.前述 1.SparkSQ ...
- 【Spark篇】---SparkSQL初始和创建DataFrame的几种方式
一.前述 1.SparkSQL介绍 Hive是Shark的前身,Shark是SparkSQL的前身,SparkSQL产生的根本原因是其完全脱离了Hive的限制. SparkSQL支持查询原 ...
- Spark SQL初始化和创建DataFrame的几种方式
一.前述 1.SparkSQL介绍 Hive是Shark的前身,Shark是SparkSQL的前身,SparkSQL产生的根本原因是其完全脱离了Hive的限制. SparkSQL支持查询原 ...
- Android 反射-换一种方式编程
Android 反射-换一种方式编程 转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/59109933 本文出自[赵彦军的博客] 上一 ...
- mybatis --- 以接口的方式进行编程
); 我们来学习下接口方式的编程. 接口类IBookDao.java package com.mybatis.dao; import com.mybatis.model.Book; public i ...
- VB 在Visio 2010 以编程方式创建子进程图
在2010年Visio以编程方式创建子进程图 Office 2010 https://msdn.microsoft.com/en-us/library/gg650651.aspx 简介: 学习如 ...
- Android开发之UI的编程方式创建
我们知道,android中一个activity对应一个xml的UI配置文件,除了用xml文件配置的方式创建用户界面外,还可以使用代码编程的方式来创建一个用户界面.如果用户界面需要在运行过程中动态生成的 ...
- 使用Callable接口创建线程和使用线程池的方式创建线程
1.使用Callable接口的方式实现多线程,这是JDK5.0新增的一种创建多线程的方法 package com.baozi.java2; import java.util.concurrent.Ca ...
- Java8内置的函数式编程接口应用场景和方式
首先,我们先定义一个函数式编程接口 @FunctionalInterface public interface BooleanFunctionalInterface<T> { boolea ...
随机推荐
- 非常全面的PHP header函数设置HTTP头的示例
突然看到这个,觉得很好,就拿过来了,如下: //定义编码 header( 'Content-Type:text/html;charset=utf-8 '); //Atom header('Conten ...
- 【css基础修炼之路】— 谈谈元素的垂直水平居中
作为一个初级的前端工程师,在开发的过程中遇到了许多问题,其中使元素垂直居中这个问题难住了我,可能在大家看来这是一个非常小的问题,但是却困扰了我很长时间,于是决定做一个总结!!! 废话不多说,直接上代码 ...
- React的安装
创建: 2019/05/01 完成: 2019/05/01 create-react-app 学习及创建单页app npx create-react-app my-app cd my-app npm ...
- Nginx启用Gzip压缩js无效的原因
Nginx启用gzip很简单,只需要设置一下配置文件即可完成,可以参考文章Nginx如何配置Gzip压缩功能.不过,在群里常有人提到,他们的网站Gzip压缩虽然成功了,但检测到JS仍然没有压缩成功,这 ...
- 问题 B: 投简历
题目描述 小华历经12寒窗苦读,又经历4年大学磨砺,终于毕业了,随着毕业季的到来,找工作也日益紧张起来.由于要面试不同的公司,因此小华需要准备不同的简历.当然最基本的信息是必不可少的,基本信息:姓名. ...
- 配置SSIS 包部署
包配置是干嘛滴! 使用包配置可以从开发环境的外部设置运行时属性和变量. 把用户变量转换成Config文件 步骤: 准备工作 把第一个例子中的userinfo.txt复制两份,放到同一个 ...
- requireJS的学习
官方文档 http://www.requirejs.cn/ 参考链接 http://www.w3cschool.cc/w3cnote/requirejs-tutorial-1.html http:// ...
- override与重载的区别
override与重载的区别override 与重载的区别,重载是方法的名称相同.参数或参数类型不同,进行多次重载以适应不同的需要 Override 是进行基类中函数的重写.
- javascript入门笔记4-数组
1.数组 var arr=new Array(); var myarray= new Array(8); //创建数组,存储8个数据. 注意: 1.创建的新数组是空数组,没有值,如输出,则显示unde ...
- 改变shape solid color
<?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http: ...