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 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> 学习笔记Spark(七)—— Spark SQL应用(2)—— Spark DataFrame基础操作 -> 正文阅读

[大数据]学习笔记Spark(七)—— Spark SQL应用(2)—— Spark DataFrame基础操作

二、Spark DataFrame基础操作

2.1、DataFrame

  • DataFrame是一种不可变的分布式数据集,这种数据集被组织成指定的列,类似于关系数据库中的表。
  • 数据集的每一列都带有名称和类型,对于数据的内部结构又很强的描述性。
  • RDD是分布式的Java对象的集合DataFrame是分布式的Row对象的集合

在这里插入图片描述


2.1.1、DataFrame特点

  • 支持KB级到PB级得到数据处理
  • 支持多种数据格式和存储系统
  • 通过Spark SQL Catalyst优化器可以进行高效的代码生成与优化
  • 能够无缝集成Spark上的大数据处理工具
  • 提供了Python、Java、Scala、R等多种语言API

2.2、创建DataFrame

  • 从结构化数据文件创建DataFrame
  • 从外部数据库创建DataFrame
  • 从RDD创建DataFrame
  • 从Hive中的表创建DataFrame

2.2.1、从结构化数据文件创建DataFrame

  1. 初始化一个SparkSession,名称为spark
  2. spark.read.parquet(path: String):读取一个Parquet文件,返回一个DataFrame
  3. spark.read.json(path: String):读取一个JSON文件,返回一个DataFrame
  4. spark.read.csv(path: String):读取CSV文件,返回一个DataFrame
  5. spark.read.text(path: String):读取文本文件的数据,返回一个DataFrame,只有一个value字段

查看DataFrame

  • printSchema:查看数据模式,打印出列的名称和类型
  • show:查看数据
    show():显示前20条记录
    show(numRows:Int):显示numRows条
    show(truncate:Boolean):是否最多只显示20个字符,默认为true
    show(numRows:Int,truncate:Boolean):显示numRows条记录并设置过长字符串的显示格式
  • first/head/take/takeAsList:获取若干行数据
  • collect/collectAsList:获取所有数据

示例:读取parquet文件创建DataFrame
1、从parquet读取数据:

val df_parquet = spark.read.parquet("/user/root/sparksql_data/users.parquet")

2、从json读取数据:

val df_json = spark.read.json("/user/root/sparksql_data/people.json")

3、从csv读取数据:

val df_csv = spark.read.option("header", "true").option("sep", ";").csv("/user/root/sparksql_data/people.csv")

2.2.2、从外部数据库创建DataFrame

  1. Spark SQL可以从外部数据库(比如MySQL、Oracle等数据库)中创建DataFrame
  2. 使用这种方式创建DataFrame需要通过JDBC连接或ODBC连接的方式访问数据库
  3. spark.read.jdbc(url: String, table: String, properties: Properties)

示例:读取mysql数据库test的student表


2.2.3、从RDD创建DataFrame-方法1

  1. 利用反射机制推断RDD模式,使用这种方式首先需要定义一个case class,因为只有case class才能被Spark隐式地转换为DataFrame。
    示例
    在这里插入图片描述

2.2.4、从RDD创建DataFrame-方法2

  1. 从原始RDD创建一个元素为Row类型的RDD
  2. 用StructType创建一个和RDD中Row的结构相匹配的Schema
  3. 通过SparkSession提供的createDataFrame方法将Schema应用到RDD上
    示例:读取people.txt创建DataFrame
    在这里插入图片描述

2.2.5、从Hive中的表创建DataFrame

  1. 通过SQL查询语句
  2. spark.read.table(tablename)
    示例:
    在这里插入图片描述
    在这里插入图片描述

任务1:

任务实现:读取Hive中的学生成绩表bigdata和math,查看学生信息

  1. 创建Hive表bigdata和math 在这里插入图片描述

  2. 导入数据到表中
    在这里插入图片描述
    在这里插入图片描述

  3. 读取Hive表bigdata和math创建DataFrame
    在这里插入图片描述

  4. 查看DataFrame
    在这里插入图片描述
    在这里插入图片描述


2.3、DataFrame常用API

示例:
在这里插入图片描述


2.3.1、自定义udf-用于SQL查询

  • import org.apache.spark.sql.functions._
  • import org.apache.spark.sql.types._
  • udf(f: AnyRef, dataType: DataType)
    示例:
    在这里插入图片描述

2.3.2、自定义udf-用于DataFrame API

  • org.apache.spark.sql.functions._
  • import org.apache.spark.sql.types._
  • udf(f: AnyRef, dataType: DataType)
    示例
    在这里插入图片描述

任务2:

任务实现:统计每个学生的平均成绩和总分

  1. 关联bigdata和math
  2. 根据学生ID分组统计成绩平均分和总分
  3. 并根据总分进行降序排序
    在这里插入图片描述

2.4、保存DataFrame

  • 1、保存成文本文件

  • 2、保存到外部数据库

  • 3、保存为Hive表

  • write方法可以将DataFrame保存成文件,write操作有一个可选参数SaveMode,用这个参数可以指定如何处理数据已经存在的情况。

    参数SaveMode:
    Overwrite代表覆盖目录下之前存在的数据
    Append代表给指导目录下追加数据
    Ignore代表如果目录下已经有文件,那就什么都不执行
    ErrorIfExists代表如果保存目录下存在文件就报错


2.4.1、保存为文本文件

  • df.write.mode("overwrite").parquet(path: String)
    在这里插入图片描述

  • df.write.mode("overwrite"). json(path: String)
    在这里插入图片描述

  • df.write.mode("overwrite").option("header", "true").option("sep", ";"). csv(path: String)
    在这里插入图片描述

  • df.write.mode("overwrite").text(path: String) //只能有一个字段


2.4.2、保存到外部数据库

  • jdbc(url: String, table: String, connectionProperties: Properties)
    在这里插入图片描述
    mysql查看:
    在这里插入图片描述

2.4.3、保存到Hive

  • df.write.mode("overwrite"). saveAsTable(tableName: String)
    在这里插入图片描述
    hive查看(先进入train数据库,然后再查看):
    在这里插入图片描述

任务3:

任务实现:将每个学生各科成绩、总分、平均分都保存到Hive中。

  • 合并学生的各科成绩、总分、平均分
  • 保存DataFrame到Hive
    在这里插入图片描述
    hive查看(先进入train数据库,然后再查看):
    在这里插入图片描述
    结果:
    在这里插入图片描述
  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2021-10-11 17:35:16  更:2021-10-11 17:37:09 
 
开发: 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 1:16:47-

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