第五章 Spark-SQL进阶(一)之Dataset用法
Spark系列文章目录
第一章 初识Spark
第二章 Spark-Core核心模型(一)
第二章 Spark-Core核心模型(二)
第三章 Spark-Core编程进阶(一)
第三章 Spark-Core编程进阶(二)
第四章 Spark-SQL基础(一)
第四章 Spark-SQL基础(二)
第五章 Spark-SQL进阶(一)
第五章 Spark-SQL进阶(二)
第五章 Spark-SQL进阶(三)
文章目录
- Spark系列文章目录
- 第五章 Spark-SQL进阶(一)
- 1.核心语法
- 1.1DataFrame
- 1.2数据类型
- 1.3注册视图
- 1.4Dataset
- 1.5Dataset API方法
第五章 Spark-SQL进阶(一)
1.核心语法
1.1DataFrame
- 第一种方式
- 通过读取外部数据集
spark.read.数据源方法()
DataFrameReader
对象中有Spark
内置支持数据源读取数据的方法- eg:
parquet csv text json jdbc table orc
等
- eg:
- 第二种方式
- 通过
createDataFrame
方法传递RDD
或Seq
参数 createDataFrame[A <: Product : TypeTag](rdd: RDD[A])
createDataFrame(rowRDD: RDD[Row], schema: StructType)
createDataFrame[A <: Product : TypeTag](data: Seq[A])
- 通过
- 第三种方式
- 通过
RDD
或Seq
对象隐式转化方法 rdd.toDF([colNames*])
seq.toDF([colNames*])
- 通过
1.2数据类型
SparkSQL
和DataFrames
支持以下数据类型
- 数值类型
ByteType
ShortType
IntegerType
LongType
FloatType
DoubleType
DecimalType
- 字符串类型
StringType
- 二进制类型
BinaryType
- 布尔类型
BooleanType
- 日期时间类型
TimestampType DateType
- 复杂类型
ArrayType (elementType, containsNull)
MapType (keyType, valueType, valueContainsNull)
StructType (fields)
StructField(name, dataType, nullable)
注意,以上类型都来自
import org.apache.spark.sql.types._
。
1.3注册视图
视图分为:
临时视图
- 范围是会话级别
- 注册临时视图:
createTempView(viewName: String)
- 注册或替换临时视图:
createOrReplaceTempView(viewName: String)
(推荐)
全局临时视图
范围是所有会话
所有会话之间共享一个全局临时视图
与系统数据库global_temp相关联
- 使用全局临时视图时必须使用限定名称来引用
注册全局临时视图:
createGlobalTempView(viewName: String)
注册或替换全局临时视图:
createOrReplaceGlobalTempView(viewName: String)
(推荐)
使用案例:
//1.注册为全局临时视图
df.createGlobalTempView("people")
//2.运行SQL的方式查询数据,注意,全局临时视图需关联系统数据库global_temp
spark.sql("SELECT * FROM global_temp.people").show()
//3.在一个新的会话中查询数据
spark.newSession().sql("SELECT * FROM global_temp.people").show()
1.4Dataset
- 第一种方式
- 通过
createDataset
方法传递RDD
或Seq
参数 createDataset[T : Encoder](data: Seq[T])
createDataset[T : Encoder](data: RDD[T])
- 通过
- 第二种方式
- 通过
DataFrame
对象转化创建 df.as[T]
- 通过
- 第三种方式
- 通过
RDD
或Seq
对象隐式转化创建 rdd.toDS
seq.toDS
- 通过
1.5Dataset API方法
类似于RDD的API
map
flatMap
mapPartitions
filter
joinWith
orderBy
repartition
repartitionByRange
sample
transform
sort
sortWithinPartitions
union
unionByName
distinct
coalesce
输出到控制台
show([numRows: Int,[truncate: Boolean|truncate: Int,[vertical: Boolean]]]):Unit
查看数据结构信息
printSchema():Unit
查询对应列数据
select(col: String, cols: String*): DataFrame
*select(cols: Column*): DataFrame
selectExpr(exprs: String*): DataFrame
select[U1](c1: TypedColumn[T, U1]): Dataset[U1]
按条件查询
where(condition: Column|conditionExpr: String): Dataset[T]
filter(condition: Column|conditionExpr: String|func: T => Boolean):Dataset[T]
限制返回行数
limit(n: Int): Dataset[T]
分组
groupBy(cols: Column*|col1: String, cols: String*): RelationalGroupedDataset
获取某列数据
apply(colName: String): Column
col(colName: String): Column
注意,完整的方法可查看Dataset参考API文档。
第五章 Spark-SQL进阶(一)之Dataset用法相关推荐
- 数据库系统概念总结:第五章 高级SQL
周末无事水文章,期末备考的总结资料 第五章 高级SQL 5.1 使用程序设计语言访问数据库 5.1.1 JDBC(Java DataBase Connectivity) JDBC标准定义了Java程序 ...
- Spark性能优化 -- Spark SQL、DataFrame、Dataset
本文将详细分析和总结Spark SQL及其DataFrame.Dataset的相关原理和优化过程. Spark SQL简介 Spark SQL是Spark中 具有 大规模关系查询的结构化数据处理 模块 ...
- SQL进阶之自连接的用法
SQL进阶之自连接的用法 自连接 越前须知(雾) 具体用法 可重排列.排列.组合 查询局部不一致的记录 排序 不分组排序 分组排序 自连接 越前须知(雾) 本系列参考<SQL进阶教程>1, ...
- Spark入门(五)Spark SQL shell启动方式(元数据存储在derby)
一.spark-sql shell介绍 Spark sql是以hive SQL提交spark任务到spark集群执行. 由于spark是计算框架没有存储功能,所有spark sql数据表映射关系存储在 ...
- Spark SQL之RDD, DataFrame, DataSet详细使用
前言 Spark Core 中,如果想要执行应用程序,需要首先构建上下文环境对象 SparkContext,Spark SQL 其实可以理解为对 Spark Core 的一种封装,不仅仅在模型上进行了 ...
- SQL进阶--EXISTS谓词的用法
SQL谓词指的是返回真值的函数 EXISTS与其他谓词不同,接受的参数是集合 因此EXISTS可以看出一种高阶的函数 SQL中没有与全称量词相当的谓词,可以使用not exists代替 1.存在量化 ...
- Mysql高级调优篇——第五章:Sql调优在面试中深度剖析
上节讲了Sql调优实战,本章聊聊面试中Sql调优深度的剖析场景! 在讲之前我们先做一些准备工作,建立一些需要用到的表: Mysql高级调优篇表补充--建表SQL_风清扬逍遥子的博客-CSDN博客⭐️t ...
- SQL进阶教程——自连接的用法(第二章)
1. 什么是自连接 针对相同的表进行的连接被称为"自连接",一旦熟练掌握自连接技术,我们便能快速的解决很多问题.但是,其处理过程不太容易想象,以至于常常被人们敬而远之. 理解自连接 ...
- 【Apache Spark 】第 6 章Spark SQL 和数据集
- 【Apache Spark 】第 5 章Spark SQL 和 DataFrames:与外部数据源交互
最新文章
- TensorFlow分布式详解
- C#实现winform仿div+css半透明遮罩效果
- 北京某公司.NET面试题
- html 查找添加联系人,使用phonegap查找联系人的实现方法
- 前端学习(3068):vue+element今日头条管理-上午总结
- warshall算法求传递闭包c++_【建模小课堂】图论算法
- Java数据结构与算法解析(二)——栈
- 用信号量进程同步与互斥
- 「leetcode」127. 单词接龙【广度优先搜索】超详细讲解!
- 拓端tecdat|数据预处理之异常值处理
- 129 MySQL数据类型(重要)
- java web 在线购书商城系统
- idea中字体由繁体变简体
- 打印机驱动无法安装到计算机是,打印机驱动无法安装、安装失败、安装不上的解决办法...
- 乌尔都语简介和Unicode由来
- matlab仿真ssb调制解调,ssb调制解调原理
- C语言知识点--define的替换列表为空是怎么回事?
- 小米9预约如此火爆,雷军的供货能跟上吗?
- C++将二进制转换为十进制
- 如何确定系统上的CPU插槽数量
热门文章
- Java判断是否为素数
- 华为端口聚合命令_华为交换机两种端口聚合模式使用实例
- 如何把Backtrack 5安装到U盘/Backtrack 4安装方法
- 魔方栈源码-网站在线玩魔方源码-云魔方
- virtualbox 装win95 win98
- 【读书笔记】IOS帝国-Apple Ⅱ/Mac/皮克斯/iPod/iTunes/iPhone/App Store/iPad,苹果教父:史蒂夫·乔布斯传_2020.02.15
- 网站的版面设计,商业Web站点设计策略,网站CI形象设计,网页色彩的搭配
- java在线播放_Java实现视频在线播放flv视频
- 计算机一级考试题产品销售情况表,Excel案例(十二)——销售统计表
- 自定义View:悬浮球与加速球