Spark-sql数据的加载与保存

Spark-SQL数据的加载与保存|加载数据|保存数据|默认数据源 通用的加载和保存 spark.read.load 是加载数据的通用方法 df.write.save 是保存数据的通用方法 加载数据 直接加载数据 spark.read.json("/opt/module/spark-local/examples/src/main/resources/people.json").show format指定加载数据类型 spark.read.fo... 阅读详情

3.1 读取和保存文件

SparkSQL读取和保存的文件一般为三种,JSON文件、CSV文件和列式存储的文件,同时可以通过添加参数,来识别不同的存储和压缩格式。

3.1.1 CSV文件

1)代码实现

package com.atguigu.sparksql;

import com.atguigu.sparksql.Bean.User;

import org.apache.spark.SparkConf;

import org.apache.spark.api.java.function.MapFunction;

import org.apache.spark.sql.*;

public class Test06_CSV {

    public static void main(String[] args) throws ClassNotFoundException {

        //1. 创建配置对象

        SparkConf conf = new SparkConf().setAppName("sparksql").setMaster("local[*]");

        //2. 获取sparkSession

        SparkSession spark = SparkSession.builder().config(conf).getOrCreate();

        //3. 编写代码

        DataFrameReader reader = spark.read();

        // 添加参数  读取csv

        Dataset<Row> userDS = reader

                .option("header", "true")//默认为false 不读取列名

                .option("sep",",") // 默认为, 列的分割

                // 不需要写压缩格式  自适应

                .csv("input/user.csv");

        userDS.show();

        // 转换为user的ds

        // 直接转换类型会报错  csv读取的数据都是string

//        Dataset<User> userDS1 = userDS.as(Encoders.bean(User.class));

        userDS.printSchema();

        Dataset<User> userDS1 = userDS.map(new MapFunction<Row, User>() {

            @Override

            public User call(Row value) throws Exception {

                return new User(Long.valueOf(value.getString(0)), value.getString(1));

            }

        }, Encoders.bean(User.class));

        userDS1.show();

        // 写出为csv文件

        DataFrameWriter<User> writer = userDS1.write();

        writer.option("seq",";")

                .option("header","true")

//                .option("compression","gzip")// 压缩格式

                // 写出模式

                // append 追加

                // Ignore 忽略本次写出

                // Overwrite 覆盖写

                // ErrorIfExists 如果存在报错

                .mode(SaveMode.Append)

                .csv("output");

        //4. 关闭sparkSession

        spark.close();

    }

}

3.1.2 JSON文件

package com.atguigu.sparksql;

import com.atguigu.sparksql.Bean.User;

import org.apache.spark.SparkConf;

import org.apache.spark.sql.*;

public class Test07_JSON {

    public static void main(String[] args) {

        //1. 创建配置对象

        SparkConf conf = new SparkConf().setAppName("sparksql").setMaster("local[*]");

        //2. 获取sparkSession

        SparkSession spark = SparkSession.builder().config(conf).getOrCreate();

        //3. 编写代码

        Dataset<Row> json = spark.read().json("input/user.json");

        // json数据可以读取数据的数据类型

        Dataset<User> userDS = json.as(Encoders.bean(User.class));

        userDS.show();

       

        // 读取别的类型的数据也能写出为json

        DataFrameWriter<User> writer = userDS.write();

        writer.json("output1");

        //4. 关闭sparkSession

        spark.close();

    }

}

3.1.3 Parquet文件

列式存储的数据自带列分割。

package com.atguigu.sparksql;

import org.apache.spark.SparkConf;

import org.apache.spark.sql.Dataset;

import org.apache.spark.sql.Row;

import org.apache.spark.sql.SparkSession;

public class Test08_Parquet {

    public static void main(String[] args) {

        //1. 创建配置对象

        SparkConf conf = new SparkConf().setAppName("sparksql").setMaster("local[*]");

        //2. 获取sparkSession

        SparkSession spark = SparkSession.builder().config(conf).getOrCreate();

        //3. 编写代码

        Dataset<Row> json = spark.read().json("input/user.json");

        // 写出默认使用snappy压缩

//        json.write().parquet("output");

        // 读取parquet 自带解析  能够识别列名

        Dataset<Row> parquet = spark.read().parquet("output");

        parquet.printSchema();

        //4. 关闭sparkSession

        spark.close();

    }

}

3.2 与MySQL交互

1)导入依赖

<!-- 早期MySQL版本 -->

<dependency>

    <groupId>mysql</groupId>

    <artifactId>mysql-connector-java</artifactId>

    <version>5.1.27</version>

</dependency>

<!-- 5.8(8.0)MySQL版本 -->

<dependency>

    <groupId>mysql</groupId>

    <artifactId>mysql-connector-java</artifactId>

    <version>8.0.18</version>

</dependency>

2)从MySQL读数据

package com.atguigu.sparksql;

import org.apache.spark.SparkConf;

import org.apache.spark.sql.Dataset;

import org.apache.spark.sql.Row;

import org.apache.spark.sql.SparkSession;

import java.util.Properties;

public class Test09_Table {

    public static void main(String[] args) {

        //1. 创建配置对象

        SparkConf conf = new SparkConf().setAppName("sparksql").setMaster("local[*]");

        //2. 获取sparkSession

        SparkSession spark = SparkSession.builder().config(conf).getOrCreate();

        //3. 编写代码

        Dataset<Row> json = spark.read().json("input/user.json");

        // 添加参数

        Properties properties = new Properties();

        properties.setProperty("user","root");

        properties.setProperty("password","000000");

//        json.write()

//                // 写出模式针对于表格追加覆盖

//                .mode(SaveMode.Append)

//                .jdbc("jdbc:mysql://hadoop102:3306","gmall.testInfo",properties);

        Dataset<Row> jdbc = spark.read().jdbc("jdbc:mysql://hadoop102:3306/gmall?useSSL=false&useUnicode=true&characterEncoding=UTF-8&allowPublicKeyRetrieval=true", "test_info", properties);

        jdbc.show();

        //4. 关闭sparkSession

        spark.close();

    }

}

3.3 与Hive交互

SparkSQL可以采用内嵌Hive(spark开箱即用的hive),也可以采用外部Hive。企业开发中,通常采用外部Hive。

3.3.1 Linux中的交互

1)添加MySQL连接驱动到spark-yarn的jars目录

[atguigu@hadoop102 spark-yarn]$ cp /opt/software/mysql-connector-java-5.1.27-bin.jar /opt/module/spark-yarn/jars

2)添加hive-site.xml文件到spark-yarn的conf目录

[atguigu@hadoop102 spark-yarn]$ cp /opt/module/hive/conf/hive-site.xml /opt/module/spark-yarn/conf

3)启动spark-sql的客户端即可

[atguigu@hadoop102 spark-yarn]$  bin/spark-sql --master yarn

spark-sql (default)> show tables;

3.3.2 IDEA中的交互

1)添加依赖

<dependencies>

    <dependency>

       <groupId>org.apache.spark</groupId>

       <artifactId>spark-sql_2.12</artifactId>

       <version>3.3.1</version>

    </dependency>

    <dependency>

       <groupId>mysql</groupId>

       <artifactId>mysql-connector-java</artifactId>

       <version>5.1.27</version>

    </dependency>

    <dependency>

       <groupId>org.apache.spark</groupId>

       <artifactId>spark-hive_2.12</artifactId>

       <version>3.3.1</version>

    </dependency>

    <dependency>

       <groupId>org.projectlombok</groupId>

       <artifactId>lombok</artifactId>

       <version>1.18.22</version>

    </dependency>

</dependencies>

2)拷贝hive-site.xml到resources目录(如果需要操作Hadoop,需要拷贝hdfs-site.xml、core-site.xml、yarn-site.xml)

3)代码实现

package com.atguigu.sparksql;

import org.apache.spark.SparkConf;

import org.apache.spark.sql.SparkSession;

public class Test10_Hive {

    public static void main(String[] args) {

        System.setProperty("HADOOP_USER_NAME","atguigu");

        //1. 创建配置对象

        SparkConf conf = new SparkConf().setAppName("sparksql").setMaster("local[*]");

        //2. 获取sparkSession

        SparkSession spark = SparkSession.builder()

                .enableHiveSupport()// 添加hive支持

                .config(conf).getOrCreate();

        //3. 编写代码

        spark.sql("show tables").show();

        spark.sql("create table user_info(name String,age bigint)");

        spark.sql("insert into table user_info values('zhangsan',10)");

        spark.sql("select * from user_info").show();

        //4. 关闭sparkSession

        spark.close();

    }

}

Spark SQL数据加载和保存实战 一:前置知识详解:  Spark SQL重要是操作DataFrame,DataFrame本身提供了save和load的操作,  Load:可以创建DataFrame,  Save:把DataFrame中的数据保存到文件或者说与具体的格式来指明我们要读取的文件的类型以及与具体的格式来指出我们要输出的文件是什么类型。  二:Spark SQL读写数据代码实战: import org. 阅读详情

相关推荐

【Spark SQL】数据的加载和保存

1. 通用的加载和保存方式 SparkSQL提供了通用的保存数据和数据加载的方式。 这里的通用指的是使用相同的API,根据不同的参数读取和保存不同格式的数据 1.1 查看SparkSql能读取的文件格式 scala> spark.read. csv format jdbc json load option options orc parquet schema table text textFile SparkSQL默认读取和保存的文件格式为pa

weixin_43589563的博客 679

SparkSQL 通过加载csv文件创建dataframe的常用方式总结

目录背景准备工作主要流程效果截图主要代码外部引用参考资料 背景 一直很好奇web后台如何启动Spark应用程序,查找Api后发现可以使用org.apache.spark.launcher.SparkLauncher来做到这一点。我想得动手测试一下,而且要做的体面一些,所以搞个简易的web工程吧,顺便学习熟悉一下使用springboot框架。在这里将整个折腾的过程记录下来,新手上路,有任何搞错的地...

抛砖引玉 3277

Spark系列(20)—— Spark SQL编程

1.Spark SQL概述1.1 什么是Spark SQLSpark SQL是用于结构化数据处理的Spark模块。与基本的Spark RDD API不同,Spark SQL提供的接口为Spark提供了有关数据结构和正在执行的计算的更多信息。在内部,Spark SQL使用这些额外的信息来执行额外的优化。与Spark SQL交互的方式有多种,包括SQL和Dataset API。计算结果时,使用相同的执行引擎,与您用于表达计算的API/语言无关。1.2 为什么要有Spark SQL1.3 Spark。

shangjg3的博客 698

IDEA写spark程序时import org.apache.spark.sql.{Row,SparkSession}错误

因为是IDEA第一次运行spark程序,所以需要导入相应的jar包 jar包来源参考我的另一篇博文 其实两篇博文描述的遇到的问题挺相似的 下载好后点击文件→项目结构→模块→依赖(lib) 也可以直接shift+Ctrl+Alt打开此界面 点击右边的➕,选择 Jars或目录,选择下载好的Jar包,单击确定。 大功告成~ ...

自渡 8282

第61课:Spark SQL数据加载和保存内幕深度解密实战

/* * *王家林老师授课 http://weibo.com/ilovepains */     第61课:Spark SQL数据加载和保存内幕深度解密实战 源文件 people.json {"name":"Michael"} {"name":"Andy","age":30} {"name":"Justin","age":19}   输出结果   {"name":"

大模型与Agent智能体 840

基于ROS2的实时视频流转换:image2rtsp在多路相机采集中的应用

本文详细介绍了如何在ROS2机器人系统中使用image2rtsp工具,将ROS2内部的相机图像话题实时转换为标准的RTSP视频流。重点阐述了其安装配置、核心参数调优,并提供了多路相机采集的实战方案,解决了机器人视觉数据跨平台、跨网络分发的难题,极大提升了视频流集成的部署效率。

weixin_29214559的博客 395

SparkSQL之加载与保存数据

SparkSQL之加载与保存数据 文章目录前言一、使用步骤1.加载数据2.保存数据3.读取mysql和写入myslq4.Spark连接hive数据库 前言 sparkSQL可以加载与保存各种类型的数据 一、使用步骤 1.加载数据 spark.read.load 是sparkSQL默认加载数据的方式,默认是加载parquet文件,但是可以通过spark.sql.sources.default 修改 spark.read.format("…")[.option("…")].load("…"),通用数据加载

weixin_44563670的博客 1254

Android 13 GMS认证避坑:手把手教你搞定RKP配置,解决GTS测试fail

本文详细解析Android 13 GMS认证中的RKP(远程密钥配置)全流程,提供GTS测试失败的深度解决方案。从RKP核心概念到实战配置技巧,帮助开发者规避常见陷阱,确保设备顺利通过Google安全认证,特别适合需要快速掌握Android13 GMS认证的工程师参考。

weixin_29796279的博客 464

Spark SQL的使用

接下来我们通过官方实例演示一下通过Spark操作Hive,提前将hive-site.xml、core-site.xml、hdfs-xml文件导入到spark目录的conf中,当然也可以操作JSON、CSV、Text、JDBC等,这里就不一一列举了。不同的是,Hive的数据操作被翻译成了MapReduce任务,而Spark SQL的数据操作在Spark中执行。与Hive类似,我们需要将MySQL连接器的jar包放到/usr/local/spark/jars目录下,经过我测试这里其实操作的就是Hive。

weixin_72525373的博客 592

S32K系列之PDB框图详解及PDB触发ADC

可编程延迟模块PDB,PDB可提供从内部或外部触发或可编程间隔信号到ADC硬件触发输入的可控制延迟。 PDB可以选择提供脉冲输出,用作CMP块中的采样窗口。 S32K系列的PDB资源如下表: PDB功能框图 在下图中,以下字母表示的意义: N:PDB通道的总数 n:PDB通道号,范围从0到N-1 M:每个PDB通道的总可用预触发 m:预触发编号,范围从0到M-1 Y:脉冲输出的总数 y:脉冲数...

zz56z56的博客 1万+

5分钟搞定!Unity中Matcap玻璃材质快速实现(含免费贴图资源)

本文详细介绍了在Unity中快速实现Matcap玻璃材质的方法,从技术原理到实战操作,包括Shader编写、参数调节和性能优化。通过Matcap技术,开发者可以高效创建逼真玻璃效果,特别适合移动端和快速迭代项目。文章还提供了免费贴图资源和进阶优化技巧,帮助提升视觉效果和运行效率。

a1b2c的博客 219

Spark SQL 数据加载和保存

format(“…”):指定加载的数据类型,包括"csv"、“jdbc”、“json”、“orc”、"parquet"和 “textFile”。 load(“…”):在"csv"、“jdbc”、“json”、“orc”、"parquet"和"textFile"格式下需要传入加载 数据的路径。 option(“…”):在"jdbc"格式下需要传入 JDBC 相应参数,url、user、password 和 dbtable 我们前面都是使用 read API 先把文件加载到 DataFrame 然后再查询,其实

weixin_52112640的博客 1205

MATLAB AppDesigner 中TextArea保留原有信息并换行显示提示信息

App Designer 中的文本区域TextArea组件,一般可以用来作为matlab app设计中的信息显示。 app.TextArea.Value = 'Hello Matlab'; Value可以是字符向量、字符向量元胞数组、字符串数组或一维分类数组。这样直接给TextArea赋值,每次赋值都会消除先前的信息,然后显示新的信息。如果想要在app实现保留原有信息、多行信息的输出,在MathWorks官方帮助中心给出了一种方法: cellArrayText{1} = sprintf('%s\n

我是麻瓜喔的博客 1万+

spark-SQL数据加载和保存

通过 spark.read.load 和 df.write.save 实现数据加载与保存。可利用 format 指定数据格式,如 csv 、 jdbc 等;option 用于设置特定参数,像 jdbc 格式下的数据库连接信息;load 和 save 则分别指定数据路径。保存时还能使用 SaveMode 包含 ErrorIfExists 、 Append 、 Overwrite 、 Ignore 等模式。

2402_88408747的博客 994

[RK3568 Android12] 添加自定义启动脚本

1:定义添加的脚本 2:rk3568_s.mk 中定义打包 3:在启动脚本中init.rk356x.rc添加权限及何时启动 4:添加权限文件file_contexts 5:系统确认是否运行

OpenWrt/WLAN/驱动/Android/嵌入式开发总结 2220

BME688传感器原理图设计,已量产(环境传感器)

在便携式空气质量监测、可穿戴健康设备这类低功耗场景中,BME688 这类集成了 VOC、温湿度、气压的四合一 MEMS 传感器越来越受欢迎 —— 它体积小、功耗低,刚好匹配便携设备的需求。但这类小信号传感器对电源噪声、电平匹配的要求很细,今天结合实际项目里的一款 BME688 接口电路,聊聊硬件设计的关键细节。

不脱发的程序猿 514

sparksql 保存点_Spark SQL数据加载和保存实战

3. 在保持文件的时候mode指定追加文件的方式/*** Specifies the behavior when data or table already exists. Options include:// Overwrite是覆盖* - `SaveMode.Overwrite`: overwrite the existing data.//创建新的文件,然后追加* - `SaveMo...

weixin_40006977的博客 234

Matlab在线性代数中的应用(一):向量组的线性相关性

求列向量组A的一个最大线性无关组可用命令rref(A)将A化成行最简形,其中单位向量对应的列向量即为最大线性无关组所含向量,其它列向量的坐标即为其对应向量用最大线性无关组线性表示的系数。 01 — 例1 求下列矩阵列向量组的一个最大无关组。 解:编写脚本文件如下: >>format rat a=[1,-2,-1,0,2;-2,4,2,6,-6;2,-1,0,2,3;3,3,3,3,4]; b=rref(a) 求得: b...

wenyusuran的专栏 3236

Spark-Spark Sql(DataFrame、DataSet、Scala代码开发、数据的加载和保存)

Spark SQL 是 Spark 用于结构化数据(structured data)处理的 Spark 模块。

迷雾总会解 2186

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

Spark SQL 数据的加载和保存

Spark SQL 数据的加载和保存

weixin_53898747的博客 971

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

spark sql数据加载与保存

** spark sql 数据的加载与保存 加载数据 ** 第一种** read直接加载数据 spark.read.加载各种数据类型 第二种 spark.read.format("…").load("…") 一般是用第一种,精简就对了。 例如:spark.read.format(“json”).load(“文件位置”) 保存数据 df.write.json("./js/一个目录") 能读的都能写;...

一个学技术狮子的博客 575

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

Spark SQL:加载和保存数据实战

Spark SQL中可以对各种数据源进行读取和处理:Parquet、Hive、Json、Hbase。相应也有数据的保存和加载的方法。 加载: 首先将数据文件上传到HDFS中:hdfs dfs -put localfile hdfs_file people.json是spark的examples/src/main/resource自带的文件: 启动spark-shell,记得启动之前要启...

叶小刀 545
上一篇: Spark-sql与Hive的交互
下一篇: Spark内存管理
走过冬季
博客等级 码龄9年 1609粉丝 341原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

走过冬季

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值