首页 > 数据库 >Spark(十一)SparkSQL 数据的加载和保存

Spark(十一)SparkSQL 数据的加载和保存

时间:2024-09-24 17:23:19浏览次数:13  
标签:jdbc scala json SparkSQL 格式 spark csv Spark 加载

通用的加载和保存方式

  • 这里的通用指的是使用相同的API,根据不同的参数读取和保存不同格式的数据,SparkSQL默认读取和保存的文件格式为parque

1. 加载数据

spark.read.load是加载数据的通用方法,支持的数据源格式:

scala> spark.read.
csv      jdbc   load     options   parquet   table   textFile      
format   json   option   orc       schema    text
  • 如果读取不同格式的数据,可以对不同的数据格式进行设定
scala> spark.read.format("…")[.option("…")].load("…")
  • format("…"):指定加载的数据类型,包括csv、jdbc、json、orc、parquet和textFile
  • load("…"):在csv、jdbc、json、orc、parquet和textFile格式下需要传入加载数据的路径
  • option("…"):在jdbc格式下需要传入JDBC相应参数,url、user、password和dbtable

直接在文件上进行查询
文件格式.'文件路径'

scala>spark.sql("select * from json.`hdfs://hadoop102:8020/datas/user.json`").show

2. 保存数据

df.write.save是保存数据的通用方法

scala> df.write.
bucketBy   format       jdbc   mode     options   parquet       save          sortBy   
csv        insertInto   json   option   orc       partitionBy   saveAsTable   text 
  • 如果保存不同格式的数据,可以对不同的数据格式进行设定
scala>df.write.format("…")[.option("…")].save("…")
  • format("…"):指定保存的数据类型,包括csv、jdbc、json、orc、parquet和textFile
  • save ("…"):在csv、orc、parquet和textFile格式下需要传入保存数据的路径
  • option("…"):在jdbc格式下需要传入JDBC相应参数,url、user、password和dbtable

保存操作可以使用SaveMode, 用来指明如何处理数据,使用mode()方法来设置

df.write.mode("append").json("/opt/module/data/output")

Parquet

  • SparkSQL的默认数据源为Parquet格式,Parquet是一种能够有效存储嵌套数据的列式存储格式
  • 数据源为Parquet文件时,SparkSQL可以方便的执行所有的操作,不需要使用format
  • 修改配置项spark.sql.sources.default,可修改默认数据源格式

1. 加载数据

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

2. 保存数据

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

JSON

  • SparkSQL能够自动推测JSON数据集的结构,并将它加载为一个Dataset[Row]
  • Spark读取的JSON文件不是传统的JSON文件,每一行都应该是一个JSON串
  • 导入隐式转换
import spark.implicits._
{"name":"Michael"}
{"name":"Andy", "age":30}
[{"name":"Justin", "age":19},{"name":"Justin", "age":19}]

1. 加载JSON文件

val path = "/opt/module/spark-local/people.json"
val peopleDF = spark.read.json(path)

2. 创建临时表

peopleDF.createOrReplaceTempView("people")

3. 数据查询

val teenagerNamesDF = spark.sql("SELECT name FROM people WHERE age BETWEEN 13 
AND 19")
teenagerNamesDF.show()
+------+
| name|
+------+
|Justin|
+------+

CSV

1. 读取csv文件

spark.read.csv("D:\\data\\output\\csv").toDF("id","name","age").show()

2. 写入csv文件

personDF.write.csv("D:\\data\\output\\csv")

MySQL

1. 读取MySQL表

val prop = new Properties()
    prop.setProperty("user","root")
    prop.setProperty("password","root")
spark.read.jdbc(
"jdbc:mysql://localhost:3306/bigdata?characterEncoding=UTF-8","person",prop).show()

2. 写入MySQL表

val prop = new Properties()
    prop.setProperty("user","root")
    prop.setProperty("password","root")
personDF.write.mode(SaveMode.Overwrite).jdbc(
"jdbc:mysql://localhost:3306/bigdata?characterEncoding=UTF-8","person",prop)

标签:jdbc,scala,json,SparkSQL,格式,spark,csv,Spark,加载
From: https://www.cnblogs.com/shihongpin/p/18429645

相关文章

  • 探索前端组件管理的新境界:远程组件加载
    引言在前端开发的世界中,组件化是构建大型应用的基石。通过将UI元素封装为可复用的组件,开发者可以提高开发效率并保持代码的一致性。然而,随着项目规模的扩大,团队往往会面临组件共享和管理的问题。传统的组件库虽然方便,但每次升级都可能需要项目方进行相应的依赖更新,这无疑增加了维护......
  • 实战教程:PC端触底加载的实现方法
    前言随着单页应用的发展,很多网站采用了触底加载的技术,用户滚动到页面底部时,会自动加载更多内容,为用户提供了更好的使用体验。本文将介绍如何在PC端实现触底加载功能。实现思路实现触底加载的关键在于判断用户是否已经滚动到页面底部。一种常用的实现方式是使用window.innerHeight、......
  • React 入门第十天:代码拆分与懒加载
    在第十天的学习中,我把重点放在了React的代码拆分和懒加载技术上。这些技术不仅能有效减少应用的初始加载时间,还能提升用户体验。随着应用的功能逐渐增加,如何确保应用性能保持高效,成为了一个必须解决的问题。1.为什么需要代码拆分?在开发大型React应用时,所有的代码通常会被打包成一......
  • 大数据毕业设计选题推荐-安顺旅游景点数据分析系统-Hive-Hadoop-Spark
    ✨作者主页:IT研究室✨个人简介:曾从事计算机专业培训教学,擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。☑文末获取源码☑精彩专栏推荐⬇⬇⬇Java项目Python项目安卓项目微信小程序项目......
  • Spark(六)运行模式(二)
    Yarn模式1、解压缩文件[user@hadoop102software]$tar-zxvfspark-3.0.0-bin-hadoop3.2.tgz-C/opt/module[user@hadoop102software]$cd/opt/module[user@hadoop102module]$mvspark-3.0.0-bin-hadoop3.2spark-yarn2、修改配置文件(1)修改hadoop配置文件/opt/module......