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
  • 第二种方式
    • 通过createDataFrame方法传递RDDSeq参数
    • createDataFrame[A <: Product : TypeTag](rdd: RDD[A])
    • createDataFrame(rowRDD: RDD[Row], schema: StructType)
    • createDataFrame[A <: Product : TypeTag](data: Seq[A])
  • 第三种方式
    • 通过RDDSeq对象隐式转化方法
    • rdd.toDF([colNames*])
    • seq.toDF([colNames*])

1.2数据类型

SparkSQLDataFrames支持以下数据类型

  • 数值类型

    • 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方法传递RDDSeq参数
    • createDataset[T : Encoder](data: Seq[T])
    • createDataset[T : Encoder](data: RDD[T])
  • 第二种方式
    • 通过DataFrame对象转化创建
    • df.as[T]
  • 第三种方式
    • 通过RDDSeq对象隐式转化创建
    • 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用法相关推荐

  1. 数据库系统概念总结:第五章 高级SQL

    周末无事水文章,期末备考的总结资料 第五章 高级SQL 5.1 使用程序设计语言访问数据库 5.1.1 JDBC(Java DataBase Connectivity) JDBC标准定义了Java程序 ...

  2. Spark性能优化 -- Spark SQL、DataFrame、Dataset

    本文将详细分析和总结Spark SQL及其DataFrame.Dataset的相关原理和优化过程. Spark SQL简介 Spark SQL是Spark中 具有 大规模关系查询的结构化数据处理 模块 ...

  3. SQL进阶之自连接的用法

    SQL进阶之自连接的用法 自连接 越前须知(雾) 具体用法 可重排列.排列.组合 查询局部不一致的记录 排序 不分组排序 分组排序 自连接 越前须知(雾) 本系列参考<SQL进阶教程>1, ...

  4. Spark入门(五)Spark SQL shell启动方式(元数据存储在derby)

    一.spark-sql shell介绍 Spark sql是以hive SQL提交spark任务到spark集群执行. 由于spark是计算框架没有存储功能,所有spark sql数据表映射关系存储在 ...

  5. Spark SQL之RDD, DataFrame, DataSet详细使用

    前言 Spark Core 中,如果想要执行应用程序,需要首先构建上下文环境对象 SparkContext,Spark SQL 其实可以理解为对 Spark Core 的一种封装,不仅仅在模型上进行了 ...

  6. SQL进阶--EXISTS谓词的用法

    SQL谓词指的是返回真值的函数 EXISTS与其他谓词不同,接受的参数是集合 因此EXISTS可以看出一种高阶的函数 SQL中没有与全称量词相当的谓词,可以使用not exists代替 1.存在量化 ...

  7. Mysql高级调优篇——第五章:Sql调优在面试中深度剖析

    上节讲了Sql调优实战,本章聊聊面试中Sql调优深度的剖析场景! 在讲之前我们先做一些准备工作,建立一些需要用到的表: Mysql高级调优篇表补充--建表SQL_风清扬逍遥子的博客-CSDN博客⭐️t ...

  8. SQL进阶教程——自连接的用法(第二章)

    1. 什么是自连接 针对相同的表进行的连接被称为"自连接",一旦熟练掌握自连接技术,我们便能快速的解决很多问题.但是,其处理过程不太容易想象,以至于常常被人们敬而远之. 理解自连接 ...

  9. 【Apache Spark 】第 6 章Spark SQL 和数据集

  10. 【Apache Spark 】第 5 章Spark SQL 和 DataFrames:与外部数据源交互

最新文章

  1. TensorFlow分布式详解
  2. C#实现winform仿div+css半透明遮罩效果
  3. 北京某公司.NET面试题
  4. html 查找添加联系人,使用phonegap查找联系人的实现方法
  5. 前端学习(3068):vue+element今日头条管理-上午总结
  6. warshall算法求传递闭包c++_【建模小课堂】图论算法
  7. Java数据结构与算法解析(二)——栈
  8. 用信号量进程同步与互斥
  9. 「leetcode」127. 单词接龙【广度优先搜索】超详细讲解!
  10. 拓端tecdat|数据预处理之异常值处理
  11. 129 MySQL数据类型(重要)
  12. java web 在线购书商城系统
  13. idea中字体由繁体变简体
  14. 打印机驱动无法安装到计算机是,打印机驱动无法安装、安装失败、安装不上的解决办法...
  15. 乌尔都语简介和Unicode由来
  16. matlab仿真ssb调制解调,ssb调制解调原理
  17. C语言知识点--define的替换列表为空是怎么回事?
  18. 小米9预约如此火爆,雷军的供货能跟上吗?
  19. C++将二进制转换为十进制
  20. 如何确定系统上的CPU插槽数量

热门文章

  1. Java判断是否为素数
  2. 华为端口聚合命令_华为交换机两种端口聚合模式使用实例
  3. 如何把Backtrack 5安装到U盘/Backtrack 4安装方法
  4. 魔方栈源码-网站在线玩魔方源码-云魔方
  5. virtualbox 装win95 win98
  6. 【读书笔记】IOS帝国-Apple Ⅱ/Mac/皮克斯/iPod/iTunes/iPhone/App Store/iPad,苹果教父:史蒂夫·乔布斯传_2020.02.15
  7. 网站的版面设计,商业Web站点设计策略,网站CI形象设计,网页色彩的搭配
  8. java在线播放_Java实现视频在线播放flv视频
  9. 计算机一级考试题产品销售情况表,Excel案例(十二)——销售统计表
  10. 自定义View:悬浮球与加速球