RDD转换为DataFrame【反射/编程】
写在前面
主要是加载文件为RDD,再把RDD转换为DataFrame,进而使用DataFrame的API或Sql进行数据的方便操作
简单理解:DataFrame=RDD+Schema
贴代码
package february.sql
import org.apache.spark.sql.types.{IntegerType, StringType, StructField, StructType}
import org.apache.spark.sql.{Row, SparkSession}
/**
* Description: ============Spark SQL支持两种不同的方法将现有RDD转换为Datasets数据集==============
*
*
* (1) 反射 case class 前提:事先需要知道你的字段,字段类型
* (2) 编程 事先不知道有哪几列
* **** 优先选择第一种 ****
*
* @Author: 留歌36
* @Date: 2019/2/25 18:41
*/
object DataFrameRDDApp {
def main(args: Array[String]): Unit = {
val spark = SparkSession.builder()
.appName(this.getClass.getSimpleName)
.master("local[2]")
.getOrCreate()
// 方法一:反射
// inferReflection(spark)
// 方法二:编程
program(spark)
spark.stop()
}
/**
* 编程的方式
* @param spark
*/
private def program(spark: SparkSession) = {
val textFile = spark.sparkContext.textFile("f:\\infos.txt")
val infoRdd = textFile.map(_.split(",")).map(line => Row(line(0).toInt, line(1), line(2).toInt))
val structType = StructType(Array(
StructField("id", IntegerType, true),
StructField("name", StringType, true),
StructField("age", IntegerType, true)))
val DF =spark.createDataFrame(infoRdd, structType)
DF.printSchema()
DF.show()
}
/**
* 反射的方式
* @param spark
*/
private def inferReflection(spark: SparkSession) = {
// RDD ==> DataFrame rdd.toDF()
val textFile = spark.sparkContext.textFile("f:\\infos.txt")
// split()返回 String[]
// 注意:需要导入隐式转换
import spark.implicits._
val infoDF = textFile.map(_.split(",")).map(line => Info(line(0).toInt, line(1), line(2).toInt)).toDF()
// =====基于dataframe的API=======之后的就都是DataFrame 的操作了==============
infoDF.show()
infoDF.filter(infoDF.col("age") > 30).show()
// ======基于SQL的API===========DataFrame 创建为一张表================
infoDF.createOrReplaceTempView("infos")
spark.sql("select * from infos where age > 30").show()
}
//类似java bean实体类
// 反射的方式,将RDD的 每个字段 与 这里的实体类 进行一一映射
case class Info(id: Int, name: String, age: Int)
}
更多相关小demo:每天一个程序:https://blog.csdn.net/liuge36/column/info/34094
RDD转换为DataFrame【反射/编程】的更多相关文章
- 36、将RDD转换为DataFrame
一.概述 为什么要将RDD转换为DataFrame? 因为这样的话,我们就可以直接针对HDFS等任何可以构建为RDD的数据,使用Spark SQL进行SQL查询了.这个功能是无比强大的. 想象一下,针 ...
- spark-sql将Rdd转换为DataFrame进行操作的两种方法
SparkConf sparkConf = new SparkConf() .setMaster("local").setAppName("ClzMap"); ...
- Spark RDD转换为DataFrame
#构造case class,利用反射机制隐式转换 scala> import spark.implicits._ scala> val rdd= sc.textFile("inp ...
- spark-DataFrame之RDD和DataFrame之间的转换
package cn.spark.study.core.mycode_dataFrame; import java.io.Serializable;import java.util.List; imp ...
- 045 RDD与DataFrame互相转换
一:RDD与DataFrame互相转换 1.总纲 二:DataFrame转换为RDD 1.rdd 使用schema可以获取DataFrame的schema 使用rdd可以获取DataFrame的数据 ...
- Spark提高篇——RDD/DataSet/DataFrame(二)
该部分分为两篇,分别介绍RDD与Dataset/DataFrame: 一.RDD 二.DataSet/DataFrame 该篇主要介绍DataSet与DataFrame. 一.生成DataFrame ...
- RDD、DataFrame和DataSet的区别
原文链接:http://www.jianshu.com/p/c0181667daa0 RDD.DataFrame和DataSet是容易产生混淆的概念,必须对其相互之间对比,才可以知道其中异同. RDD ...
- RDD转换DataFrame
Spark SQL有两种方法将RDD转为DataFrame. 1. 使用反射机制,推导包含指定类型对象RDD的schema.这种基于反射机制的方法使代码更简洁,而且如果你事先知道数据schema,推荐 ...
- RDD、DataFrame和DataSet
简述 RDD.DataFrame和DataSet是容易产生混淆的概念,必须对其相互之间对比,才可以知道其中异同:DataFrame多了数据的结构信息,即schema.RDD是分布式的 Java对象的集 ...
随机推荐
- Cassandra查询操作趟坑记录
例子表 CREATE TABLE employee ( name TEXT, age SMALLINT, phone TEXT, bornDate DATE, createDate timestamp ...
- centos7配置JDK
CentOS7自带jdk1.8 查看当前系统jdk的版本:java -version 列举匹配已安装的java的软件包:yum list installed | grep java 卸载安装的jdk: ...
- 简易数据分析 11 | Web Scraper 抓取表格数据
这是简易数据分析系列的第 11 篇文章. 今天我们讲讲如何抓取网页表格里的数据.首先我们分析一下,网页里的经典表格是怎么构成的. First Name 所在的行比较特殊,是一个表格的表头,表示信息分类 ...
- 使用Eclipse开发动态Javaweb项目
使用Eclipse开发动态Javaweb项目 一.Eclipse的使用 1. 把开发选项切换到 JavaEE 2. 可以在 Window -> Show View 中找到 Package Exp ...
- 从SpringBoot构建十万博文聊聊限流特技
前言 在开发十万博客系统的的过程中,前面主要分享了爬虫.缓存穿透以及文章阅读量计数等等.爬虫的目的就是解决十万+问题:缓存穿透是为了保护后端数据库查询服务:计数服务解决了接近真实阅读数以及数据库服务的 ...
- 如果使用tf::transform进行简单的不同frame间的pose转换
tf转换,分为两部分:broadcaster和listener.前者是tf的发布者,后者是接收者.我们如果要建立一个完整的tf体系,需要自己先生成tf信息用broadcaster发布出去,然后再在需要 ...
- This probably means that Tcl wasn't installed properly.
报错 D:/Anaconda3/tcl/tcl8.6/init.tcl: version conflict for package "Tcl": have 8.6.8, need ...
- lightoj 1030-B - Discovering Gold (概率dp)
题意:有一个直线的金矿,每个点有一定数量的金子:你从0开始,每次扔个骰子,扔出几点就走几步, 然后把那个点的金子拿走:如果扔出的骰子超出了金矿,就重新扔,知道你站在最后一个点:问拿走金 子的期望值是多 ...
- Java 编程语言中很少被人了解的特性-statement label
下面的语句会编译报错或者打印什么? System.out.print("baidu site :"); https://www.baidu.com; System.out.prin ...
- 【LeetCode】75-颜色分类
题目描述 给定一个包含红色.白色和蓝色,一共 n 个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色.白色.蓝色顺序排列. 此题中,我们使用整数 0. 1 和 2 分别表示红色.白色 ...