Spark读取数据库(Mysql)的四种方式讲解

Spark使用Java读取Mysql 同时,处理敏感信息(如密码)时要特别小心,确保不要将敏感信息硬编码在代码中,而是使用环境变量或配置文件来管理这些敏感信息。在Apache Spark中使用Java来读取MySQL数据库中的数据,你需要使用JDBC(Java Database Connectivity)来连接MySQL,并且通常你会使用Spark的。你应该能够看到你的MySQL表中的数据被读取并显示在你的控制台或你选择的输出位置。首先,确保你的项目中包含了MySQL JDBC驱动和Spark SQL的依赖。不过,需要注意的是, 阅读详情

目前Spark支持四种方式从数据库中读取数据,这里以Mysql为例进行介绍。

一、不指定查询条件

这个方式链接MySql的函数原型是:

def jdbc(url: String, table: String, properties: Properties): DataFrame

  我们只需要提供Driver的url,需要查询的表名,以及连接表相关属性properties。下面是具体例子:

val url = "jdbc:mysql://www.iteblog.com:3306/iteblog?user=iteblog&password=iteblog"
val prop = new Properties()
val df = sqlContext.read.jdbc(url, "iteblog", prop )
println(df.count())
println(df.rdd.partitions.size)

  我们运行上面的程序,可以看到df.rdd.partitions.size输出结果是1,这个结果的含义是iteblog表的所有数据都是由RDD的一个分区处理的,所以说,如果你这个表很大,很可能会出现OOM

WARN TaskSetManager: Lost task 0.0 in stage 1.0 (TID 14, spark047219):
 java.lang.OutOfMemoryError: GC overhead limit exceeded at com.mysql.jdbc.MysqlIO.reuseAndReadPacket(MysqlIO.java:3380)

这种方式在数据量大的时候不建议使用。

二、指定数据库字段的范围

  这种方式就是通过指定数据库中某个字段的范围,但是遗憾的是,这个字段必须是数字,来看看这个函数的函数原型:

def jdbc(
    url: String,
    table: String,
    columnName: String,
    lowerBound: Long,
    upperBound: Long,
    numPartitions: Int,
    connectionProperties: Properties): DataFrame

  前两个字段的含义和方法一类似。columnName就是需要分区的字段,这个字段在数据库中的类型必须是数字;lowerBound就是分区的下界;upperBound就是分区的上界;numPartitions是分区的个数。同样,我们也来看看如何使用:

val lowerBound = 1
val upperBound = 100000
val numPartitions = 5
val url = "jdbc:mysql://www.iteblog.com:3306/iteblog?user=iteblog&password=iteblog"
val prop = new Properties()
val df = sqlContext.read.jdbc(url, "iteblog", "id", lowerBound, upperBound, numPartitions, prop)

  这个方法可以将iteblog表的数据分布到RDD的几个分区中,分区的数量由numPartitions参数决定,在理想情况下,每个分区处理相同数量的数据,我们在使用的时候不建议将这个值设置的比较大,因为这可能导致数据库挂掉!但是根据前面介绍,这个函数的缺点就是只能使用整形数据字段作为分区关键字。

  这个函数在极端情况下,也就是设置将numPartitions设置为1,其含义和第一种方式一致。

三、根据任意字段进行分区

  基于前面两种方法的限制,Spark还提供了根据任意字段进行分区的方法,函数原型如下:

def jdbc(
    url: String,
    table: String,
    predicates: Array[String],
    connectionProperties: Properties): DataFrame

这个函数相比第一种方式多了predicates参数,我们可以通过这个参数设置分区的依据,来看看例子:

查看源代码打印帮助

val predicates = Array[String]("reportDate <= '2014-12-31'",
    "reportDate > '2014-12-31' and reportDate <= '2015-12-31'")
val url = "jdbc:mysql://www.iteblog.com:3306/iteblog?user=iteblog&password=iteblog"
val prop = new Properties()
val df = sqlContext.read.jdbc(url, "iteblog", predicates, prop)

最后rdd的分区数量就等于predicates.length。

四、通过load获取

Spark还提供通过load的方式来读取数据。

sqlContext.read.format("jdbc").options(
  Map("url" -> "jdbc:mysql://www.iteblog.com:3306/iteblog?user=iteblog&password=iteblog",
    "dbtable" -> "iteblog")).load()

  options函数支持url、driver、dbtable、partitionColumn、lowerBound、upperBound以及numPartitions选项,细心的同学肯定发现这个和方法二的参数一致。是的,其内部实现原理部分和方法二大体一致。同时load方法还支持json、orc等数据源的读取。

本博客文章除特别声明,全部都是原创!
尊重原创,转载请注明: 转载自过往记忆(http://www.iteblog.com/)
本文链接地址: 【Spark读取数据库(Mysql)的四种方式讲解】(http://www.iteblog.com/archives/1560)

Spark 读取csv文件/读取mysql数据 1、spark读取csv数据文件 https://www.cnblogs.com/gaopeng527/p/4961464.html val df = sqlContext.load("com.databricks.spark.csv", Map("path" -> "/tmp/model/nlp/lda/data_result_0605_new.txt", "header"-&gt... 阅读详情

相关推荐

Spark读取MySQL数据JDBC方式

通过本文,我们学习了如何使用 Spark 通过 JDBC 连接到 MySQL 数据库,并进行数据的读取。这种方式除了适用于 MySQL,也同样适用于其他支持 JDBC 的关系数据库。然而,本文仅作为入门示例,真实世界中可能需要处理更多高级的用例和优化。例如,分布式读取、连接池管理、故障转移等。希望本文能帮助你更好地理解 Spark 和 JDBC 的结合使用,欢迎分享和评论。

优快云 精品推荐 575

11.9 spark SQL读取MySQL数据

注意别忘记了驱动包:mysql-connector-java-5.1.6.jar public static void main(String[] args) {   SparkConf conf = new SparkConf().setAppName("JDBCDataSource").setMaster("local");   JavaSparkContext sc = new Jav...

心雨先生 754

[Spark进阶]-- 读取数据库(Mysql)的四种方式讲解

本文转载自"过往记忆"(http://www.iteblog.com/) 本文链接: 【Spark读取数据库(Mysql)的四种方式讲解】(http://www.iteblog.com/archives/1560) 目前Spark支持四种方式从数据库中读取数据,这里以Mysql为例进行介绍。 一、不指定查询条件     这个方式链接MySql的函数原型是: 1 def jdbc...

欢迎来到我的博客,一起探索代码里的世界! 4752

Spark -- 读取mysql的4种方式和各自的应用场景

spark read mysql

TheBigBlue的博客 9844

sparkSQL连接cassandra和mysql的demo

spark连接cassandra和mysql数据库,并执行sql查询,以及一些初级的spark的map flatmap filter等操作

【芯片验证随心记】1.SystemVerilog中,rand和randc的区别?如何用constraint实现randc?

在SystemVerilog里,randc 的“不重复循环”特性是用一个 周期性排列器(permutation engine) 实现的,而这个引擎在 LRM 里并没有公开。我们只能在 “用户空间” 用 rand + constraint 去模仿它的行为。每次随机化只取 queue.pop_front(),用完再洗。在4次随机化内,y会依次出现0,1,2,3各一次(顺序随机)每次随机化,x可能是0-3中的任意值,可能连续多次相同。每次随机化时,在未使用的值里随机挑一个;第5次随机化时,重新生成新的排列周期。

qq_43172512的博客 342

160624、Spark读取数据库(Mysql)的四种方式讲解

目前Spark支持四种方式从数据库中读取数据,这里以Mysql为例进行介绍。 一、不指定查询条件   这个方式链接MySql的函数原型是: 1 defjdbc(url:String, table:String, properties:Properties):DataFrame   我们只需要提供Driver的url,需要查询的表名,以及连接表相关属性pr...

weixin_30508309的博客 101

STM32 DMA串口重定向printf:高效调试与性能优化实战

本文详细介绍了STM32 DMA串口重定向printf的实现方法与性能优势。通过对比传统方式的CPU高占用问题,阐述了DMA技术如何实现高效数据传输,大幅降低CPU负载。文章包含完整的代码实现、缓冲区管理技巧及实战调试方案,帮助开发者优化嵌入式系统调试效率。

lake5的博客 99

spark从mysql读取数据_Spark读取数据库(Mysql)的四种方式讲解

现在Spark支撑四种办法从数据库中读取数据,这里以Mysql为例进行介绍。一、不指定查询条件这个办法连接MySql的函数原型是:def jdbc(url: String, table: String, properties: Properties): DataFrame咱们只需求供给Driver的url,需求查询的表名,以及连接表有关特点properties。下面是详细比如:val url = ...

weixin_39844880的博客 1322

W5500 TCP服务器状态机详解:从SOCK_CLOSED到SOCK_ESTABLISHED的完整流程

本文深入解析W5500芯片作为TCP服务器时的状态机转换流程,从SOCK_CLOSED到SOCK_ESTABLISHED的完整链路实践。通过硬件协议栈架构分析、状态机全流程拆解及异常处理方案,帮助开发者构建高可靠性的嵌入式网络服务端,优化TCP连接性能与稳定性。

Jerry的专栏 1167

ADS新手必看:5分钟搞定Smith圆图阻抗匹配(附详细操作截图)

本文为射频电路设计新手提供了在ADS软件中快速使用Smith圆图进行阻抗匹配的实战指南。通过清晰的步骤和操作截图,详细演示了如何从负载阻抗点出发,通过添加电感和电容元件,在5分钟内完成向50欧姆标准阻抗的匹配,并介绍了仿真验证与性能调优的方法,帮助工程师和学生直观掌握这一核心技能。

weixin_29261711的博客 395

spark 持久化 mysql_Spark读取数据库(Mysql)的四种方式讲解

目前一、不指定查询条件这个方式链接MySql的函数原型是: def jdbc(url: String, table: String, properties: Properties): DataFrame我们只需要提供Driver的url,需要查询的表名,以及连接表相关属性properties。下面是具体例子: val url = "jdbc:mysql://www.iteblog.com:3306...

weixin_42127020的博客 365

SAPABAP金色传说:关于导入和导出Excel时反复弹窗提示 SAP GUI安全性问题的解决方法

文章目录前言一、提示的到底是什么?二、关闭SAP GUI安全提示的步骤1.设置位置 前言 如果你在SAP中,经常需要将数据导出Excel,或者使用Excel进行批导数据,那么你对下面这个频繁出现的弹窗提示一定不陌生! 系统试图创建文件 C:\Users\15265\Desktop\EXPORT.XLSX 于目录 C:\Users\15265\Desktop\ 是否要授权修改父目录及其所有子目录? 不管你是不是选的记住我的决定,它必出!就很烦!那如何处理才能关闭呢? 提示:以下是本篇文章正文内容,看完快

Easystudios博客 1万+

spark了解mysql_Spark讀取數據庫(Mysql)的四種方式講解

目前一、不指定查詢條件這個方式鏈接MySql的函數原型是:我們只需要提供Driver的url,需要查詢的表名,以及連接表相關屬性properties。下面是具體例子:我們運行上面的程序,可以看到df.rdd.partitions.size輸出結果是1,這個結果的含義是iteblog表的所有數據都是由RDD的一個分區處理的,所以說,如果你這個表很大,很可能會出現OOM這種方式在數據量大的時候不建議使...

weixin_30783205的博客 136

RYU+mininet——RYU

1. 使用RYU做mininet的控制器 1.1 RYU介绍与安装 RYU是一款基于python的控制器,你可用Ryu实现各种想要实现的网络功能,它可以下发或接收流表进行各种路由运算。 建议使用高版本的Ubuntu系统安装ryu,否则会有各种错误,安装过程比较简单,如下: apt install gcc libffi-dev libssl-dev libxml2-dev libxslt1-...

qq_34415266的博客 1万+

Web3:Ubuntu系统 使用Docker-compose方式部署blockscout浏览器&配置版本-v5.2.3-beta+charts图表

详细介绍了在Ubuntu 23.04系统上部署Blockscout浏览器的步骤,以及过程中遇到的问题进行一一解决。

鄙人kunzhi96,感恩遇见! 2万+

spark从mysql读取数据_Spark之读取MySQL数据的五种方式

本文介绍了使用Spark连接Mysql的五种方式。主要内容:不指定查询条件指定数据库字段的范围根据任意字段进行分区通过load获取,和方式二类似加载条件查询后的数据1.不指定查询条件def main(args: Array[String]): Unit = {val spark =SparkSession.builder().appName("MysqlSupport").master("loca...

weixin_32075603的博客 5686

开源模型应用落地-qwen模型小试-Qwen3-8B-快速体验(一)

阿里云推出国内首个集成“快思考”与“慢思考”能力的 Qwen3-8B 大语言模型,以80亿参数和 128K 上下文支持,重塑AI应用边界并助力开发者高效部署

以微薄之力,予他人些许温暖. 2万+

Spark连接MySQL的几种方式

一、spark连接mysql数据库的第一种方式: def main(args: Array[String]): Unit = { val spark: SparkSession = SparkSession.builder().master("local").appName("createdataframefrommysql") .config("spark.sql.shuffle.p...

weixin_42821133的博客 3963

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

spark之JDBCRDD--从Mysql中读取数据

spark中的RDD有很多对应的实现,比如JdbcRDD,是用来从MySQL中读取数据的。 先来看一下JdbsRDD的源码: /** * An RDD that executes a SQL query on a JDBC connection and reads results. * For usage example, see test case JdbcRDDSuite. * * @...

weixin_43866709的博客 5003

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

使用 Spark 和 Delta Lake 构建近实时数据仓库

本文来自于2019年10月15日-17日荷兰首都阿姆斯特丹举行的 SPARK + AI SUMMIT Europe 2019 会议,议题名为《Near Real Time Data Warehousing with Apache Spark and Delta Lake》,分享者 Jasper Groot。本文 PPT请关注过往记忆大数据微信公众号,并回复data_warehouse关键字获...

过往记忆大数据 3477

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

上一篇: hadoop2 YARN/MRv2 Node Manager
下一篇: Oracle的rollup、cube、grouping sets函数
mllhxn
博客等级 码龄14年 116粉丝 122原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值