分别用反射、编程接口的方式创建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 ...
随机推荐
- Linux命令之添加权限Chmod的使用
chmod是change mode的缩写,是修改文件权限的一个命令: 一个文件分别有三组权限:用户拥有者,用户组 第一个横杆-表示文件,如果是d表示目录.还有可能是l,表示链接. 第一组(rw-)表示 ...
- Spring Boot入门程序
创建第一个Spring Boot的入门程序. 带你一步一步的,搭建第一个Spring Boot 的入门程序,并成功运行,通过实践过程,初步认识和了解如何使用Spring Boot 创建应用程序. 一. ...
- Spring Cloud入门程序——注册服务提供者
1.创建Spring Starter project 2.引入依赖 点击finish 3.创建启动类 package com.hello; import org.springframework.boo ...
- 初识Python(四)
一.数字数据类型 Python的数字数据类型用于存储数值,它是不可变的数据类型,这意味着改变数字数据类型,则需要一个新分配的对象: Python支持四种不同的数值类型: 整型(Int):通常被称为是整 ...
- IOS 纯代码添加 Button Image Label 添加到自定义View中
@interface ViewController () /**获取.plist数据*/ @property (nonatomic,strong) NSArray *apps; @end @imple ...
- CentOS6.5手动升级gcc4.8.2
一.简易安装 操作环境 CentOS6.5 64bit,原版本4.4.7,不能支持C++11的特性~,希望升级到4.8.2 不能通过yum的方法升级,需要自己手动下载安装包并编译 本文记录了在Cent ...
- 2017.10.25 Java List /ArrayList 三种遍历方法
java list三种遍历方法性能比较 学习java语言list遍历的三种方法,顺便测试各种遍历方法的性能,测试方法为在ArrayList中插入记录,然后遍历ArrayList,测试代码如下: pac ...
- idea中将项目转换成Maven项目
第一步:项目右键->Add Framework... 选择maven ok 这样就成功转换成了一个maven项目
- U盘装CentOS6.4
1.打开UltraISO,依次点击“文件”>“打开”,选择“CentOS-6.4-i386-bin-DVD1.iso”文件. 2.“启动”>“写入硬盘映像”,在“硬盘驱动器选择u盘”,写入 ...
- linux命令详解-useradd,groupadd
linux命令详解-useradd,groupadd 我们在linux命令行中输入useradd: Options: -b, --base-dir BASE_DIR base direc ...