spark读取Jdbc数据

Spark读写JDBC数据 前言: 使用spark去读取JDBC的数据,有三种读取方式,如果数据量特别大的时候,达到了亿级的数据量,最好使用分区的方式读取.否则容易出现OOM异常. 文末再附pom依赖! 一:读取数据的三种方式 1.第一种方式(不指定分区) 1.jdbc源码参数 url:表示jdbc连接 table:表示读取的表名 properties:表示配置信息 def jdbc(url: String, table:... 阅读详情

 

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>test</artifactId>
        <groupId>org.example</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>spark</artifactId>

    <properties>
        <!--        其实这就是变量引用       -->
        <spark.version>2.3.3</spark.version>
        <scala.version>2.11.12</scala.version>
        <spark.scala>2.11</spark.scala>
    </properties>


    <dependencies>

        <!-- scala语言 -->
        <dependency>
            <groupId>org.scala-lang</groupId>
            <artifactId>scala-library</artifactId>
            <version>${scala.version}</version>
        </dependency>
        <!-- spark_sql会包含所有spark核心包 -->
        <dependency>
            <groupId>org.apache.spark</groupId>
            <artifactId>spark-sql_${spark.scala}</artifactId>
            <version>${spark.version}</version>
        </dependency>
        <!-- spark和 hive的整合包 -->
        <dependency>
            <groupId>org.apache.spark</groupId>
            <artifactId>spark-hive_${spark.scala}</artifactId>
            <version>${spark.version}</version>
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <!-- 指定编译scala的插件 -->
            <plugin>
                <groupId>net.alchim31.maven</groupId>
                <artifactId>scala-maven-plugin</artifactId>
                <version>4.3.1</version>
                <executions>
                    <execution>
                        <goals>
                            <goal>compile</goal>
                            <goal>testCompile</goal>
                        </goals>
                        <configuration>
                            <args>
                                <arg>-dependencyfile</arg>
                                <arg>${project.build.directory}/.scala_dependencies</arg>
                            </args>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</project>

​​​​​​​

package com.ws

import java.sql.{DriverManager, ResultSet}

import org.apache.spark.{SparkConf, SparkContext}
import org.apache.spark.rdd.JdbcRDD

object SparkReadMysql {
  def main(args: Array[String]): Unit = {
    val conf = new SparkConf()
      .setAppName("spark加载mysql数据")
      .setMaster("local")

    val sc = new SparkContext(conf)


    val getConn = () => DriverManager.getConnection(
      "jdbc:mysql://localhost:3306/dynamic_rule", "root", "root")
    val resMapping = (rs: ResultSet) => {
      val id = rs.getInt(1)
      val name = rs.getString(2)
      val url = rs.getString(3)
      val perms = rs.getString(4)
      (id, name, url, perms)
    }

    /*
        new JdbcRDD(sc,getConnection(),sql,lower,upper,numpt,resultMapFunc)
        sc: SparkContext对象
        getConnection(): 一个返回数据库连接的函数
        sql: sql脚本,因为他要分区进行处理,所以sql中需要默认提供一个splitPK,并用占位符指定范围,用于分割 (menu_id> ? and menu_id<?),而且这个字段必须是整形
        lower: 下界
        lower: 上界
        numpt: 分区数
        resultMapFunc:resultSet转换函数
     */
    val rdd: JdbcRDD[(Int, String, String, String)] = new JdbcRDD[(Int, String, String, String)](sc,
      getConn,
      "select menu_id,name,url,perms from sys_menu where menu_id> ? and menu_id<?",
      0, 10, 1,
      resMapping)
    rdd.foreach(println)
    sc.stop()
  }
}

创建一个JdbcRdd,这个JdbcRdd是rdd的子类,需要7个参数,有一定局限性

    /*
        new JdbcRDD(sc,getConnection(),sql,lower,upper,numpt,resultMapFunc)
        sc: SparkContext对象
        getConnection(): 一个返回数据库连接的函数
        sql: sql脚本,因为他要分区进行处理,所以sql中需要默认提供一个splitPK,并用占位符指定范围,用于分割 (menu_id> ? and menu_id<?),而且这个字段必须是整形
        lower: 下界
        lower: 上界
        numpt: 分区数
        resultMapFunc:resultSet转换函数
     */

spark.read.jdbc方法 jdbc(url, table, column=None, lowerBound=None, upperBound=None, numPartitions=None, predicates=None, properties=None)[source] Construct a DataFrame representing the database table named table ac... 阅读详情

相关推荐

Spark-SQL连接JDBC的方式及代码写法

Spark SQL 是 Spark 用于结构化数据(structured data)处理的 Spark 模块。1.3.3 兼容 Hive。在已有的仓库上直接运行 SQL 或者 HQL。1.2.1 易整合。无缝的整合了 SQL 查询和 Spark 编程。1.2.4 标准数据连接。通过 JDBC 或者 ODBC 来连接。1.2.2 统一的数据访问。使用相同的方式连接不同的数据源。1.首先启动thriftserver服务。2.打开IDEA导入hive-jdbc包。Spark-SQL概述。

weixin_60343288的博客 1040

Spark SQL数据源:JDBC

Spark SQL还可以使用JDBC API从其他关系型数据库读取数据,返回的结果仍然是一个DataFrame,可以很容易地在Spark SQL中处理,或者与其他数据源进行连接查询。执行上述命令(dbtable属性的值是一个子查询,相当于SQL查询中的FROM关键字后的一部分)注意:Spark 2.4.0开始的Spark SQL的JDBC属性里才有query属性。将数据帧内容以jdbc格式写入数据库spark_db的test表。查看结果数据帧内容,执行命令:resultDF.show()

梁辰兴的博客 4117

spark读取jdbc数据库数据

Spark 读取 JDBC 数据是一个高效、可扩展的方案,适用于大数据集成。核心是正确配置连接参数和驱动依赖。通过分区和谓词下推优化,能显著提升性能。如果您有特定数据库或场景问题,可提供更多细节,我会进一步优化建议!

2301_80954266的博客 1471

Spark读取jdbc

【代码】Spark读取jdbc。

shy_snow的专栏 630

Spark-SQL之JDBC与MySQL交互|从JDBC读取数据|向JDBC写数据

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

SmallScorpion 592

spark读取和存储jdbc数据库

框架 import java.sql.{DriverManager, SQLException} import org.apache.spark.sql.DataFrame //读取数据(读取出来的数据为dataframe格式) //connection:jdbc的配置存储 //source:读取的源表 def read(source: String, c...

s243471087的博客 1860

Spark操作JDBC将数据存入到MySQL并读取出来

Spark操作JDBC-API实现将数据存入到MySQL并读取出来(在小海豚里面操作) 代码: bject mysql { def main(args: Array[String]): Unit = { //Spark支持通过Java JDBC访问关系型数据库。需要使用JdbcRDD //创建 val conf = new SparkConf().setAppName(...

汉子一枚 1737

Spark读取MySQL数据JDBC方式

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

优快云 精品推荐 575

spark通过jdbc读取数据和写入数据

/** * spark通过jdbc读取数据 * @param spark * @return */ def getData(spark:SparkSession): Dataset[Row] ={ //方式一 val jdbcD...

chongxilei2565的博客 2842

树莓派驱动步进电机

步进电机一般由电机、驱动器构成,树莓派连接驱动器控制电机。 一、接线 DIR+/- 用于控制方向,PUL+/- 用于控制转动; 正极DIR+ 和 PUL+ 接到GPIO口,两个负极接到GPIO口或地线均可,控制的时候不使用。 实验中,DIR+ 接35口,PUL+ 接38口。 树莓派4B GPIO口如图所示 远离树莓派USB的一侧 是 1、2、3号口 二、驱动 DIR控制方向,使用高电平或低电平控制; PUL控制转动,使用脉冲驱动。 三、代码 import RPi.GPI.

weixin_42337765的博客 1万+

spark jdbc mysql_【SPARK】使用Spark(jdbc)从MySQL读取和保存数据

本文最初思路来自 http://www.sparkexpert.com ,但是,发现 https://github.com/sujee81/SparkApps 提供的源码太老了,Spark官方从1.4.0已经放弃原来的方法(包含:createJDBCTable,insertIntoJDBC等 ),取而代之的是 sqlContext.read().jdbc()和sqlContext.write()....

weixin_39705794的博客 741

别再只调A*算法了!聊聊ROS机器人导航中,OpenCV视觉信息如何与激光雷达数据“打配合”

本文探讨了ROS机器人导航中激光雷达与OpenCV视觉融合的实战策略,揭示了如何通过多模态感知提升导航精度。文章详细介绍了视觉特征到代价地图的转化方法、系统级挑战的工程解决方案,以及融合感知下的路径规划进化,帮助开发者优化机器人导航系统。

weixin_29278805的博客 226

spark通过JDBC读取外部数据库,过滤数据

官网链接: http://spark.apache.org/docs/latest/sql-programming-guide.html#jdbc-to-other-databases http://spark.apache.org/docs/latest/sql-data-sources-jdbc.html 1. 过滤数据 情景:使用spark通过JDBC的方式读取postg...

diaoxie5099的博客 892

Silvaco Atlas(五)——物理模型总结

物理模型总结

qsz1425AWD2121的博客 2152

第14.8章 高翔博士最新开源框架Lightning-LM源码解读(八):位姿平滑器PoseSmoother深度剖析,从原理到代码实现

本文深度解析了高翔博士开源框架Lightning-LM中的位姿平滑器PoseSmoother模块。该模块通过设置平滑因子,在保证位姿准确性的同时减少突变,使位姿变化更平稳。文章详细讲解了模块功能、数据流程和核心代码实现,包括构造函数、拷贝构造函数以及关键的PushDRPose和PushPose函数。重点分析了位姿平滑算法原理,涉及运动有效性校验、位姿队列维护和平滑因子调节等核心机制。此外还介绍了相关C++语法(如显式构造函数、默认拷贝构造)和优化方向。本解析为SLAM学习者提供了位姿平滑处理的实用实现范例。

行知SLAM 605

Spark SQL使用 JDBC 从其他数据库读取数据的数据源

spark-shell方式读取 bin/spark-shell --driver-class-path ***.jar --jars ***.jar 用户可以使用 Data Sources API 将来自远程数据库的表作为 DataFrame 或 Spark SQL 临时视图进行加载。也可以在数据源选项中指定 JDBC 连接属性。用户 和 密码通常作为登录数据源的连接属性提供。除了连接属...

weixin_44327656的博客 866

飞牛fnNAS搭建个人小账本

本文介绍了如何在飞牛NAS上部署ezBookkeeping个人记账应用。该开源工具支持多平台使用,具备双因素认证、多级分类等功能。文章详细讲解了Docker激活、镜像下载、容器部署等步骤,并展示了账户管理、交易记录等基础操作。同时指导用户通过ZeroTier实现远程访问,方便随时随地使用个人记账系统。该方案既保障了数据隐私,又提供了专业记账功能,适合对财务隐私敏感的用户。

dgnankai的专栏 783

spark-jdbc读取数据库分区

spark通过jdbc从数据库中读取数据,如果数据过大,一定要分区,否则运行慢,分区数目可以从webui上看到,分区数就是task数目。如果分区后,有的task很快完成有的task完成比较慢,这时候需要用sql去查找数据库中看看到底哪里发生数据倾斜了,在数据倾斜的地方多建立几个分区,这样会快些。 好了,不多说,上代码 import java.util.Properties import org....

qq_16234927的博客 1927

第23章:代码迁移——用AI将Vue2迁移到Vue3、将JS迁移到TS

> - 用AI自动将Vue2 Options API转为Vue3 Composition API的完整流程 > - 将JavaScript项目批量迁移到TypeScript,自动添加类型推导 > - 处理依赖冲突、破坏性变更和迁移后的验证方法 > - 一个完整的Vue2到Vue3迁移案例(含路由、状态管理) > - 我如何用AI将公司一个10万行代码的老项目从JS升级到TS

sfishfly的博客 208

【FPGA教程案例49】控制案例1——基于FPGA的PID控制器verilog实现

PID控制器产生于1915年,PID控制律的概念最早是由LYAPIMOV提出的,到目前为止,PID控制器以及改进的PID控制器在工业控制领域里最为常见。PID控制器(比例-积分-微分控制器),由比例单元 P、积分单元 I 和微分单元 D 组成。通过Kp,Ki和Kd三个参数的设定。PID控制器主要适用于基本线性和动态特性不随时间变化的系统。图1为PID控制器的基本结构框图。PID控制器以其结构简单、稳定性好、工作可靠、调整方便而成为工业控制的主要技术之一。...

FPGA/MATLAB学习教程/源码/项目合作开发 4531

spark中通过jdbc读取和存储数据

本文为spark下通过jdbc从mysql读取数据和将计算结果存入到mysql的例子,具体代码如下: package com.cxd.sql; import java.util.HashMap; import java.util.Map; import org.apache.spark.SparkConf; import org.apache.spark.sql.Dataset; i

u010592112的博客 6352

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

spark通过jdbc读取数据库的并行

代码如下: val conf = new SparkConf().setAppName("testMysqlToHiveJdbc") .setMaster("local") val spark = SparkSession.builder() .config(conf)...

weixin_30384217的博客 1282

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

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

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

Spark读取mysql(jdbc)数据分区两种API

Spark读取mysql(jdbc)数据分区两种API

mrye的博客 957

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

spark读取oracle java,通过jdbc读取OBIEE数据--Spark示例

最近在用Spark同步数据的时候想到,是否可以直接从已有的OBIEE读取数据,OBIEE上面有完整的语义层,读取数据就比较方便了.我先测试了 10.1.3.4.1的版本,jdbc位置在$obieefolder/OracleBI/jdbc/bijdbc.jar可以使用以下命令测试java -classpath $obieefolder/OracleBI/jdbc/bijdbc.jar oracle....

weixin_39758956的博客 492

Spark使用Java通过HiveServer2 JDBC方式跨集群读取Hive数据

Spark通过HiveServer2 JDBC方式访问Hive数据(Java语言) 1、环境信息准备 jdbc连接url ,通常都是 端口为10000的连接 jdbc用户名 jdbc密码 2、代码实战 public static void main(String[] args) { SparkConf conf = new SparkConf().setAppName("Spark-Read-Hive-by-Java") .setMaster.

一个数据小开发的博客 3161
上一篇: mysql8 recursive 用法、场景(orcale的connect by )
下一篇: linux,ntp时间同步服务器设置步骤
JNWsong
博客等级 码龄9年 287粉丝 204原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值