Spark,连接MySQL数据库,添加数据,读取数据

以下是使用Spark连接MySQL数据库、添加数据和读取数据的步骤(基于Scala API):

 

1. 准备工作

 

- 添加MySQL驱动依赖

在Spark项目中引入MySQL Connector JAR包(如 mysql-connector-java-8.0.33.jar ),或通过Spark提交命令指定:

bash

spark-submit --jars mysql-connector-java-8.0.33.jar your_app.jar

 

 

- 确保MySQL服务运行

确认数据库、表存在,且Spark所在节点可访问MySQL端口(默认3306)。

 

2. 读取MySQL数据

 

scala

import org.apache.spark.sql.SparkSession

 

val spark = SparkSession.builder()

  .appName("Spark MySQL Example")

  .master("local[*]") // 或集群地址

  .getOrCreate()

 

// 读取参数配置

val jdbcUrl = "jdbc:mysql://localhost:3306/test_db?useSSL=false&useUnicode=true&characterEncoding=utf8"

val table = "users" // 表名

val user = "root"

val password = "your_password"

 

// 读取数据为DataFrame

val df = spark.read.format("jdbc")

  .option("url", jdbcUrl)

  .option("dbtable", table)

  .option("user", user)

  .option("password", password)

  .load()

 

// 显示数据

df.show()

 

 

3. 写入数据到MySQL

 

scala

// 假设已有待写入的DataFrame(如dfToSave)

val writeMode = "append" // 写入模式:append(追加)、overwrite(覆盖)、ignore(忽略重复)、errorIfExists(冲突报错)

 

dfToSave.write.format("jdbc")

  .option("url", jdbcUrl)

  .option("dbtable", "new_users") // 目标表名

  .option("user", user)

  .option("password", password)

  .option("driver", "com.mysql.cj.jdbc.Driver") // 驱动类(可选,Spark会自动推断)

  .mode(writeMode)

  .save()

 

 

关键参数说明

 

-  jdbcUrl :MySQL连接URL,需指定数据库名和字符编码(避免中文乱码)。

 

-  dbtable :支持直接写表名,或子查询(如 "(SELECT * FROM users WHERE age > 18) AS subquery" )。

 

-  writeMode :控制写入行为,根据需求选择模式。

 

注意事项

 

1. 驱动版本匹配:确保MySQL驱动版本与数据库版本兼容(如MySQL 8.0+对应 mysql-connector-java 8.0+ )。

 

2. 分区并行读取:若数据量大,可添加 partitionColumn 、 lowerBound 、 upperBound 参数并行读取:

scala

.option("partitionColumn", "id") // 分区字段(需为数字类型)

.option("lowerBound", "1") // 分区最小值

.option("upperBound", "1000") // 分区最大值

.option("numPartitions", "4") // 分区数(并行度)

 

 

3. 事务支持:MySQL JDBC写入不保证事务原子性,大规模写入建议使用批量操作或外部工具(如Sqoop)。

 

通过以上代码,可实现Spark与MySQL的数据交互。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/83867.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

关于 APK 反编译与重构工具集

一、apktool — APK 解包 / 重打包 apktool 是一款开源的 Android APK 工具,用于: 反编译 APK 查看资源和布局文件 生成 smali 文件(DEX 的反汇编) 对 APK 进行修改后重新打包 它不能还原 Java 源码,只能将 D…

[解决方案] Word转PDF

背景: 之前做过一些pdf导出, 客户提了一个特别急的需求, 要求根据一个模版跟一个csv的数据源, 批量生成PDF, 因为之前用过FOP, 知道调整样式需要特别长的时间, 这个需求又特别急, 所…

01 基本介绍及Pod基础

01 查看各种资源 01-1 查看K8s集群的内置资源 [rootmaster01 ~]# kubectl api-resources NAME SHORTNAMES APIVERSION NAMESPACED KIND bindings v1 …

19 C 语言位运算、赋值、条件、逗号运算符详解:涵盖运算符优先级与复杂表达式计算过程分析

1 位运算符 位运算符是对整数的二进制表示&#xff08;补码形式&#xff09;进行逐位操作的运算符。以下是主要的位运算符及其功能描述&#xff1a; 运算符描述操作数个数副作用&按位与2无|按位或2无^按位异或2无~按位取反1无<<按位左移2无>>按位右移2无 1.1…

哈希查找方法

已知哈希表长度为11&#xff0c;哈希函数为H&#xff08;key&#xff09;&#xff1d;key&#xff05;11&#xff0c;随机产生待散列的小于50的8个元素&#xff0c;同时采用线性探测再散列的方法处理冲突。任意输入要查找的数据&#xff0c;无论是否找到均给出提示信息。 int f…

JavaScript性能优化实战(10):前端框架性能优化深度解析

引言 React、Vue、Angular等框架虽然提供了强大的抽象和开发效率,但不恰当的使用方式会导致严重的性能问题,针对这些问题,本文将深入探讨前端框架性能优化的核心技术和最佳实践。 React性能优化核心技术 React通过虚拟DOM和高效的渲染机制提供了出色的性能,但当应用规模…

类和对象------2

目录 一. C面向对象模型初探1 .成员变量和函数的存储 二 this指针1 &#xff09;this指针工作原理2 &#xff09;this指针的使用3&#xff09; const修饰成员函数4 &#xff09;const修饰对象(常对象) 3.友元1 )友元语法2) 课堂练习 4 强化训练(数组类封装) 四 运算符重载&…

量子计算在金融科技中的应用前景

随着量子计算技术的飞速发展&#xff0c;其在各行业的应用潜力逐渐显现&#xff0c;金融科技领域更是备受关注。量子计算的强大计算能力有望为金融行业带来前所未有的变革&#xff0c;从风险评估到投资组合优化&#xff0c;从高频交易到加密技术&#xff0c;量子计算都可能成为…

Redisson 四大核心机制实现原理详解

一、可重入锁&#xff08;Reentrant Lock&#xff09; 可重入锁是什么&#xff1f; 通俗定义 可重入锁类似于一把“智能锁”&#xff0c;它能识别当前的锁持有者是否是当前线程&#xff1a; 如果是&#xff0c;则允许线程重复获取锁&#xff08;重入&#xff09;&#xff0c;并…

srs-7.0 支持obs推webrtc流

demo演示 官方教程: https://ossrs.net/lts/zh-cn/blog/Experience-Ultra-Low-Latency-Live-Streaming-with-OBS-WHIP 实现原理就是通过WHIP协议来传输 SDP信息 1、运行 ./objs/srs -c conf/rtc.conf 2、obs推流 3、web端播放webrtc流 打开web:ht

面试题——JDBC|Maven|Spring的IOC思想|DI思想|SpringMVC

目录 一、JDBC 1、jdbc连接数据库的基本步骤&#xff08;掌握**&#xff09; 2、Statement和PreparedStatement的区别 &#xff08;掌握***&#xff09; 二、Maven 1、maven的作用 2、maven 如何排除依赖 3、maven scope作用域有哪些&#xff1f; 三、Spring的IOC思想 …

从代码学习数学优化算法 - 拉格朗日松弛 Python版

文章目录 前言1. 问题定义 (Problem Definition)2. 拉格朗日松弛 (Lagrangian Relaxation)3. 拉格朗日对偶问题 (Lagrangian Dual)4. 次梯度优化 (Subgradient Optimization)5. Python 代码实现导入库和问题定义辅助函数:求解拉格朗日松弛子问题次梯度优化主循环结果展示与绘图…

密码学实验

密码学实验二 一、实验目的&#xff08;本次实验所涉及并要求掌握的知识点&#xff09; 掌握RSA算法的基本原理并根据给出的RSA算法简单的实现代码源程序,以及能够使用RSA对文件进行加密。掌握素性测试的基本原理&#xff0c;并且会使用Python进行简单的素性测试以及初步理解…

力扣面试150题-- 从中序与后序遍历序列构造二叉树

Day 44 题目描述 思路 这题类似与昨天那题&#xff0c;首先来复习一下&#xff0c;后序遍历&#xff0c;对于后序遍历每一个元素都满足以下规律&#xff1a; &#xff08;左子树&#xff09;&#xff08;右子树&#xff09;&#xff08;根&#xff09;&#xff0c;那么我们直…

2区组的2水平析因实验的混区设计

本文是实验设计与分析&#xff08;第6版&#xff0c;Montgomery著傅珏生译)第7章2k析因的区组化和混区设计第7.4节的python解决方案。本文尽量避免重复书中的理论&#xff0c;着于提供python解决方案&#xff0c;并与原书的运算结果进行对比。您可以从Detail 下载实验设计与分析…

反向传播算法——矩阵形式递推公式——ReLU传递函数

总结反向传播算法。 来源于https://udlbook.github.io/udlbook/&#xff0c;我不明白初始不从 x 0 \boldsymbol{x}_0 x0​开始&#xff0c;而是从 z 0 \boldsymbol{z}_0 z0​开始&#xff0c;不知道怎么想的。 考虑一个深度神经网络 g [ x i , ϕ ] g[\boldsymbol{x}_i, \bold…

2025年PMP 学习二十三 16章 高级项目管理

2025年PMP 学习二十三 16章 高级项目管理 文章目录 2025年PMP 学习二十三 16章 高级项目管理高级项目管理战略管理战略管理的组成要素&#xff1a;企业战略转化为战略行动的阶段&#xff1a; 组织战略类型战略组织类型组织级项目管理OPM&#xff08;公司项目管理&#xff09; 组…

Journal of Real-Time Image Processing 投稿过程

投稿要求双栏12页以内(包括参考文献)&#xff0c;这个排版要求感觉不是很严格&#xff0c;我当时就是用普通的双栏的格式去拍的版&#xff0c;然后就提交了&#xff0c;也没单独去下载模版。 投稿过程 12.12 Submission received 12.12 Submission is under technical check 1…

t检验详解:原理、类型与应用指南

t检验详解&#xff1a;原理、类型与应用指南 t检验&#xff08;t-test&#xff09;是一种用于比较两组数据均值是否存在显著差异的统计方法&#xff0c;适用于数据近似正态分布且满足方差齐性的场景。以下从核心原理、检验类型、实施步骤到实际应用进行系统解析。 一、t检验的…

Web4X·AI实业未来家庭普及产品矩阵

Web4XAI实业未来家庭普及产品矩阵 > 打造一个“AI能干活、人更自由”的超级生活系统&#xff08;web4-web4.0&#xff09; 一、AI生活服务类 1、代表产品&#xff1a;  AI语音助手&#xff08;对话、提醒、天气、家庭调度&#xff09;  AI陪护机器人&#xff08;老…