一. 读取和保存说明

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. 牛客网 剑指Offer 索引

    二维数组中的查找 替换空格 从尾到头打印链表 重建二叉树 用两个栈实现队列 旋转数组的最小数字 斐波那契数列 跳台阶 变态跳台阶 矩形覆盖 二进制中1的个数 数值的整数次方 调整数组顺序使奇数位于偶数 ...

  2. python mysqlclient安装失败 Command "python setup.py egg_info" failed with error code 1

    python2 python3 中代码 pip install mysqlclient 都安装失败的话, 很有可能是你的操作系统中没有安装mysql 如果确定已经安装了,请忽略下面的内容. Ubunt ...

  3. JAVA笔记10__Math类、Random类、Arrays类/日期操作类/对象比较器/对象的克隆/二叉树

    /** * Math类.Random类.Arrays类:具体查JAVA手册...... */ public class Main { public static void main(String[] ...

  4. Iptables 代理局域网内的主机上网

    参考连接:https://developer.aliyun.com/article/607330 环境为云环境,有外网主机的IP为192.168.0.39,无外网主机的IP为192.168.0.228 ...

  5. oracle 归档日志:db_recovery_file_dest、log_archive_dest和log_archive_dest_n的区别和使用

    概念: db_recovery_file_dest:默认的指定闪回恢复区路径 log_archive_dest:指定归档文件存放的路径,所有归档路径必须是本地的,默认为''.log_archive_d ...

  6. 有关unsigned和有符号类型的区别

    相信大家对于unsigned这个玩意并不陌生,但是有的时候却会被它搞懵,比如下面: #include<iostream> using std::cout; using std::cin; ...

  7. Fiddler抓包工具学习及使用

    一.Fiddler工作原理 Fiddler是位于客户端和服务器端之间的代理,客户端发送请求,fiddler会拦截该请求,再转发到服务器端,服务器端处理请求做出的响应,也要被fiddler拦截,fidd ...

  8. JMeter接口自动化发包与示例

    JMeter接口自动化发包与示例 近期需要完成对于接口的测试,于是了解并简单做了个测试示例,看了看这款江湖上声名远播的强大的软件-Jmeter靠不靠谱. 官网:https://jmeter.apach ...

  9. Java 代码执行流程

    Java 代码执行流程 类加载过程 加载 -> 验证 -> 准备 -> 解析 -> 初始化 -> 使用 -> 卸载 类加载时机:代码使用到这个类时 验证阶段 &qu ...

  10. Django笔记&教程 5-3 综合使用示例

    Django 自学笔记兼学习教程第5章第3节--综合使用示例 点击查看教程总目录 1 - 生成学号场景 场景描述: 教务管理系统中,学生注册账号,学生选择年级后,生成唯一学号. 细节分析: 学生学号由 ...