IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> SparkSQL基础操作 -> 正文阅读

[大数据]SparkSQL基础操作

1、读取与保存文件

1.1、读取文本文件

读取以下文本文件

1500100001,施笑槐,22,女,文科六班
1500100002,吕金鹏,24,男,文科六班
1500100003,单乐蕊,22,女,理科六班
1500100004,葛德曜,24,男,理科三班
1500100005,宣谷芹,22,女,理科五班
1500100006,边昂雄,21,男,理科二班
1500100007,尚孤风,23,女,文科六班
1500100008,符半双,22,女,理科六班
1500100009,沈德昌,21,男,理科一班
1500100010,羿彦昌,23,男,理科六班

例:

// 创建SparkSession
val spark: SparkSession = SparkSession
  .builder()
  .appName("readTextFile")
  .master("local")
  .getOrCreate()

val studentsDF: DataFrame = spark
  .read
  // 指定列名
  .schema("id INT,name STRING,age INT,gender STRING,clazz STRING")
  // 指定分隔符
  .option("seq", ",")
  // 指定文件格式
  .format("csv")
  // 指定路径
  .load("spark/data/stu/students.txt")

// 显示十行
studentsDF.show(10)

在这里插入图片描述

1.2、读取MySQL中的数据

例:

// 创建SparkSession
val spark: SparkSession = SparkSession
  .builder()
  .appName("readMySQL")
  .master("local")
  .getOrCreate()

val stuJDBC: DataFrame = spark.read
  .format("jdbc")
  .option("url", "jdbc:mysql://master:3306/student")
  .option("dbtable", "student")
  .option("user", "root")
  .option("password", "123456")
  .load()
// 显示前十行
stuJDBC.show(10)

在这里插入图片描述

1.3、将数据保存为orc格式

将上述从MySQL中读取的数据保存为orc格式的文件
例:

// 保存文件
stuJDBC.write
  // 指定保存的模式
  // 指定写入的模式: Append追加、Overwrite覆盖、ErrorIfExists存在就报错、Ignore存在即忽略
  .mode(SaveMode.Overwrite)
  // 指定输出格式
  .format("orc")
  .save("spark/data/stuORC/")

2、SparkSQL SQL语法

SparkSQL SQL语法中可以执行SQL语句,并且支持开窗函数,可以将写好的SQL语句放入spark.sql()中执行。在此就不多赘述。
下面将举例一个简单的例子

需求:统计每个班级有多少学生
例:

// 创建SparkSession
val spark: SparkSession = SparkSession
  .builder()
  .appName("readTextFile")
  .master("local")
  .getOrCreate()

val studentsDF: DataFrame = spark
  .read
  // 指定列名
  .schema("id INT,name STRING,age INT,gender STRING,clazz STRING")
  // 指定分隔符
  .option("seq", ",")
  // 指定文件格式
  .format("csv")
  // 指定路径
  .load("spark/data/stu/students.txt")
      
// 创建一个临时视图
studentsDF.createOrReplaceTempView("students")
spark.sql(
  """
    |select clazz
    |       ,count(id) as cnt
    |from students
    |group by clazz
  """.stripMargin).show()

3、SparkSQL DSL语法

DSL含有

  • select
  • filter
  • where
  • join
  • order by

等等操作

// 创建SparkSession
val spark: SparkSession = SparkSession
  .builder()
  .appName("readTextFile")
  .master("local")
  .getOrCreate()

val studentsDF: DataFrame = spark
  .read
  // 指定列名
  .schema("id INT,name STRING,age INT,gender STRING,clazz STRING")
  // 指定分隔符
  .option("seq", ",")
  // 指定文件格式
  .format("csv")
  // 指定路径
  .load("spark/data/stu/students.txt")

// 导入隐式转换
import spark.implicits._

studentsDF
  .select($"id", $"name", $"age", $"clazz")
  // where筛选出理科班的学生
  .where($"clazz" like "理科%")
  // filter筛选年龄大于23的学生
  .filter(row => {
  val age: Int = row.getAs[Int]("age")
  age > 23
  })
  .show()

在这里插入图片描述

需求:统计每个班级的人数

// 创建SparkSession
val spark: SparkSession = SparkSession
  .builder()
  .appName("readTextFile")
  .master("local")
  .getOrCreate()

val studentsDF: DataFrame = spark
  .read
  // 指定列名
  .schema("id INT,name STRING,age INT,gender STRING,clazz STRING")
  // 指定分隔符
  .option("seq", ",")
  // 指定文件格式
  .format("csv")
  // 指定路径
  .load("spark/data/stu/students.txt")

// 导入隐式转换
import spark.implicits._
studentsDF
  .groupBy($"clazz")
  .count()
  .show()

在这里插入图片描述

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2022-01-04 13:29:40  更:2022-01-04 13:32:07 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 13:37:10-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码