一. 读取和保存说明

SparkSQL提供了通用的保存数据和数据加载的方式,还提供了专用的方式

读取:通用和专用

保存

保存有四种模式:
默认: error : 输出目录存在就报错
append: 向输出目录追加
overwrite : 覆盖写
ignore: 忽略,不写

二. 数据格式

1. Parquet

Spark SQL的默认数据源为Parquet格式。Parquet是一种能够有效存储嵌套数据的列式存储格式。

数据源为Parquet文件时,Spark SQL可以方便的执行所有的操作,不需要使用format。修改配置项spark.sql.sources.default,可修改默认数据源格式。

读取

val df = spark.read.load("examples/src/main/resources/users.parquet")

保存

//读取json文件格式
var df = spark.read.json("/opt/module/data/input/people.json")
//保存为parquet格式
df.write.mode("append").save("/opt/module/data/output")

2. Json

Spark SQL 能够自动推测JSON数据集的结构,并将它加载为一个Dataset[Row]. 可以通过SparkSession.read.json()去加载JSON 文件。

注意:Spark读取的JSON文件不是传统的JSON文件,每一行都应该是一个JSON串。

数据格式:employees.json

{"name":"Michael"}
{"name":"Andy", "age":30}

1)导入隐式转换

import spark.implicits._

2)读取Json文件

//专用的读取
val df1: DataFrame = sparkSession.read.json("input/employees.json")
//通用读取
val df: DataFrame = sparkSession.read.format("json").load("input/employees.json")

3)保存为Json文件

    //导隐式包,转为DataSet
import sparkSession.implicits.
val ds: Dataset[Emp] = rdd.toDS()
ds.write.mode("overwrite")json("output/emp.json")

3. CSV

CSV: 逗号作为字段分割符的文件

tsv: \t,tab作为字段分割符的文件

读取

    // 通用的读取
val df: DataFrame = sparkSession.read.format("csv").load("input/person.csv")
// 专用的读
val df1: DataFrame = sparkSession.read.csv("input/person.csv")

保存

CSV的参数可以到DataFrameReader 609行查看

//DataFrame
df1.write.option("sep",",").mode("overwrite").csv("output/csv")

4. Mysql

读取

    val props = new Properties()
/*
JDBC中能写什么参数,参考 JDBCOptions 223行
*/
props.put("user","root")
props.put("password","root")
//库名
val df: DataFrame = sparkSession.read.jdbc("jdbc:mysql://localhost:3306/spark_test", "tbl_user", props)
// 全表查询 只显示前N条
df.show()
//指定查询
df.createTempView("user")
sparkSession.sql("select * from user where id > 5").show() //通用的读

通用的读

读取mysql的数据

/**
* @description: 测试读取mysql数据
* @author: HaoWu
* @create: 2020年09月11日
*/
object ReadMysqlTest {
def main(args: Array[String]): Unit = {
val conf = new SparkConf().setMaster("local[*]").setAppName("readMysql")
val spark = SparkSession
.builder()
.config(conf)
.getOrCreate()
import spark.implicits._
val ids = List(1,2,3,4).mkString("'", "','", "'")
val resutl = spark
.read
.format("jdbc")
.option("url", "jdbc:mysql://hadoop102:3306/gmall0421?useSSL=false")
.option("user", "root")
.option("password", "root")
.option("query", s"select * from user_info where id in (${ids})")
.load()
.as[UserInfo] // df -> ds
.rdd
.map(userInfo => (userInfo.id, userInfo)) resutl.collect().foreach(print)
}
}

保存

    val list = List(Emp("jack", 2222.22), Emp("jack1", 3222.22), Emp("jack2", 4222.22))
val rdd: RDD[Emp] = sparkSession.sparkContext.makeRDD(list, 1)
//导入隐式包
import sparkSession.implicits._
val ds: Dataset[Emp] = rdd.toDS()
val props = new Properties()
props.put("user","root")
props.put("password","root")
// 表名可以是已经存在的表t1,也可以是一张新表t1(用的多) //专用的写
ds.write.jdbc("jdbc:mysql://localhost:3306/0508","t1",props)
    // 通用的写
ds.write.
option("url","jdbc:mysql://localhost:3306/库名")
//表名
.option("dbtable","t2")
.option("user","root")
.option("password","root")
.mode("append")
.format("jdbc").save()

Spark(十二)【SparkSql中数据读取和保存】的更多相关文章

  1. Spark学习笔记4:数据读取与保存

    Spark对很多种文件格式的读取和保存方式都很简单.Spark会根据文件扩展名选择对应的处理方式. Spark支持的一些常见文件格式如下: 文本文件 使用文件路径作为参数调用SparkContext中 ...

  2. 【原】Learning Spark (Python版) 学习笔记(二)----键值对、数据读取与保存、共享特性

    本来应该上周更新的,结果碰上五一,懒癌发作,就推迟了 = =.以后还是要按时完成任务.废话不多说,第四章-第六章主要讲了三个内容:键值对.数据读取与保存与Spark的两个共享特性(累加器和广播变量). ...

  3. Spark学习之数据读取与保存总结(一)

    一.动机 我们已经学了很多在 Spark 中对已分发的数据执行的操作.到目前为止,所展示的示例都是从本地集合或者普通文件中进行数据读取和保存的.但有时候,数据量可能大到无法放在一台机器中,这时就需要探 ...

  4. MyBatis基础入门《十二》删除数据 - @Param参数

    MyBatis基础入门<十二>删除数据 - @Param参数 描述: 删除数据,这里使用了@Param这个注解,其实在代码中,不使用这个注解也可以的.只是为了学习这个@Param注解,为此 ...

  5. (转)SpringMVC学习(十二)——SpringMVC中的拦截器

    http://blog.csdn.net/yerenyuan_pku/article/details/72567761 SpringMVC的处理器拦截器类似于Servlet开发中的过滤器Filter, ...

  6. Spark学习之数据读取与保存(4)

    Spark学习之数据读取与保存(4) 1. 文件格式 Spark对很多种文件格式的读取和保存方式都很简单. 如文本文件的非结构化的文件,如JSON的半结构化文件,如SequenceFile结构化文件. ...

  7. OpenJDK源码研究笔记(十二):JDBC中的元数据,数据库元数据(DatabaseMetaData),参数元数据(ParameterMetaData),结果集元数据(ResultSetMetaDa

    元数据最本质.最抽象的定义为:data about data (关于数据的数据).它是一种广泛存在的现象,在许多领域有其具体的定义和应用. JDBC中的元数据,有数据库元数据(DatabaseMeta ...

  8. Spark基础:(四)Spark 数据读取与保存

    1.文件格式 Spark对很多种文件格式的读取和保存方式都很简单. (1)文本文件 读取: 将一个文本文件读取为一个RDD时,输入的每一行都将成为RDD的一个元素. val input=sc.text ...

  9. FreeSql (十二)更新数据时指定列

    var connstr = "Data Source=127.0.0.1;Port=3306;User ID=root;Password=root;" + "Initia ...

随机推荐

  1. 0x02

    #include<bits/stdc++.h> using namespace std; int n,a[10][10],vis[10],ans,b[10][10]; inline int ...

  2. Serverless 工程实践|自建 Apache OpenWhisk 平台

    作者 | 刘宇(江昱) 前言:OpenWhisk 是一个开源.无服务器的云平台,可以在运行时容器中通过执行扩展的代码响应各种事件,而无须用户关心相关的基础设施架构. OpenWhisk 简介 Open ...

  3. SpringBoot之MultipartFile文件上传(6)

    1.静态文件 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <ti ...

  4. windows下端口占用

    1,netstat -ano | findstr 1235 2,taskkill /pid 9772 /f

  5. C# | VS2019连接MySQL的三种方法以及使用MySQL数据库教程

    本文将介绍3种添加MySQL引用的方法,以及连接MySQL和使用MySQL的教程 前篇:Visual Studio 2019连接MySQL数据库详细教程 \[QAQ \] 第一种方法 下载 Mysql ...

  6. Spring Data Redis Stream的使用

    一.背景 Stream类型是 redis5之后新增的类型,在这篇文章中,我们实现使用Spring boot data redis来消费Redis Stream中的数据.实现独立消费和消费组消费. 二. ...

  7. C++中简单使用HP-Socket

    目录 简介 使用方式 实现简单线程池 实现TCP客户端 实现TCP服务端 实现Http客户端 附件 简介 HP-Socket 是一套通用的高性能 TCP/UDP /HTTP 通信 框架 ,包含服务端组 ...

  8. 什么是齐博x1标签

    X系列的标签跟V系列的标签区别还是很大的.在V系列的时候,只有一种很简单的标签比如$label[XXXX]以前的标签相对现在的来说太简单的点,所以在功能上也比较受限.X系列目前有几下几种标签 {qb: ...

  9. [bzoj1483]梦幻布丁

    对于每一个颜色用一个链表存储,并记录下:1.当前某种颜色的真实颜色:2.这种颜色的数量(用于启发式合并的判断):3.当前答案(即有几段),然后对于每一个操作简单处理一下就行了. 1 #include& ...

  10. [cf1396E]Distance Matching

    根据$dis(x,y)=d[x]+d[y]-2d[lca(x,y)]$,由于所有点都出现了1次,距离即$\sum_{i=1}^{n}d_{i}-2\sum d[lca(x,y)]$(以下假设根深度为0 ...