Spark:数据的加载和保存

一、数据的加载和保存

1.1 通用的加载和保存方式

 SparkSql提供了通用的保存数据和数据加载的方式,这里的通用指的是使用相同的API,根据不同的参数读取和保存不同格式的数据,SparkSql默认读取和保存的文件格式为parquet

读取数据:

保存数据:

读取json文件:

scala 复制代码
spark.read.format("json").load("data/user.json")

或者:

scala 复制代码
spark.read.json("data/user.json")

保存为json文件:

scala 复制代码
df.write.format("json").save("output1")

我们前面都是使用read API先把文件加载到DataFrame然后再查询,其实,我们也可以直接在文件上进行查询:

复制代码
文件格式.`文件路径`

例:

加载数据:

保存数据:

保存操作可以使用SaveMode用来指明如何处理数据,使用mode方法来设置,有一点很重要,这些SaveMode都是没有加锁的,也不是原子操作,SaveMode是一个枚举类,其中的常量包括:

Scala/Java Any Language Meaning
SaveMode.ErrorIfExists(default) "error"(default) 如果文件已经存在则抛出异常
SaveMode.Append "append" 如果文件已经存在则追加
SaveMode.Overwrite "overwrite" 如果文件已经存在则覆盖
SaveMode.Ignore "ignore" 如果文件已经存在则忽略

Parquet

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

数据源为Parquet文件时,SparkSql可以方便的执行所有的操作,不需要使用format,要想修改默认数据源格式,可以通过修改如下配置项:

复制代码
spark.sql.sources.defautl

Json

SparkSql能够自动推测Json数据集的结构,并将它加载为一个DataSetRow,可以通过SparkSession.read.json()去加载Json文件

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

Csv

SparkSql可以配置csv文件的列表信息,读取csv文件,csv文件的第一行设置为数据列

scala 复制代码
spark.read.format("csv").option("sep",";").option("inferSchema","true").option("header","true").load("data/user.csv")

Mysql

SparkSql可以通过JDBC从关系型数据库中读取数据的方式创建DataFrame,通过对DataFrame一系列的计算后,还可以将数据再写回关系型数据库中,如果使用spark-shell操作,可在启动shell时指定相关的数据库驱动路径或者将数据库驱动放到spark的类路径下

scala 复制代码
 val df: DataFrame = spark.read
      .format("jdbc")
      .option("url", "jdbc:mysql://master:3306/test")
      .option("driver", "com.mysql.jdbc.Driver")
      .option("user", "root")
      .option("password", "123456")
      .option("dbtable", "j1")
      .load()


    df.write
      .format("jdbc")
      .option("url", "jdbc:mysql://master:3306/test")
      .option("driver", "com.mysql.jdbc.Driver")
      .option("user", "root")
      .option("password", "123456")
      .option("dbtable", "j11")
      .save
相关推荐
段一凡-华北理工大学9 小时前
2026 高炉炼铁智能化技术全景与演进路径~系列文章11:演进路径与行业未来
大数据·网络·人工智能·算法·工业智能体·高炉炼铁智能化
搞科研的小刘选手9 小时前
【中山大学主办】第六届计算机科学与区块链国际学术会议(CCSB 2026)
分布式·神经网络·计算机视觉·区块链·计算机科学·共识算法·自然语言
狒狒热知识9 小时前
合规筑基专业赋能178软文网引领软文营销行业规范化发展
大数据
小饼干在学嘎瓦10 小时前
本地缓存和分布式缓存如何选择?
分布式·缓存
ZGi.ai11 小时前
企业AI资产管理体系:提示词、工作流、知识库应该怎么管
大数据·知识库·工作流编排·ai资产·提示词管理
XLYcmy12 小时前
全链路验证测试系统:一个针对智能代理(Agent)系统全链路能力的自动化验证脚本
分布式·python·http·网络安全·ai·llm·agent
爱分享的康康12 小时前
低成本自动驾驶数据采集设备理性分析:康谋入门套装适配性解析
大数据·人工智能
程序鉴定师13 小时前
上海小程序开发的坚实保障与行业优势解析
大数据·小程序
Elastic 中国社区官方博客13 小时前
我们如何在 Elasticsearch Serverless 上将向量搜索吞吐量提升一倍
大数据·数据库·人工智能·elasticsearch·搜索引擎·云原生·serverless
zgl_2005377914 小时前
源代码:跨数据库通用SQL语法解析与标注拆解
大数据·数据库·数据仓库·sql·etl·源代码管理