Spark(idea)操作mysql进行查询和插入 (代码+理解)

首先在maven中加入配置
            <!--mysql--><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.27</version></dependency>
然后在idea配置数据库

在这里插入图片描述

1) 查询

      //1.查询数据//创建jdbcRDD,访问数据库val sql = "select name,age from rdd where id >= ? and id <= ?"//有个分区的概念val jdbcRDD = new JdbcRDD(sc,() => {//获取数据库连接对象Class.forName(driver)java.sql.DriverManager.getConnection(url, userName, passWd)},sql,1,3,2,(rs)=>{println(rs.getString(1)+","+rs.getInt(2))})jdbcRDD.collect   //这里是行动算子

2.插入(优化前)

    //结果:(发现顺序并不是插入的输入,因为分给的executor不同,但是mysql是无序的,所以并没有关系)//3	ss	40//2	lisi	30//1	zhangsan	20dataRDD.foreach{case (id,username ,age) =>{//连接对象Class.forName(driver)val connection:Connection = java.sql.DriverManager.getConnection(url, userName, passWd)val sql = "insert into rdd(id,name,age) values (?,?,?)"val statement = connection.prepareStatement(sql)statement.setInt(1,id)statement.setString(2,username)statement.setInt(3,age)statement.executeUpdate()statement.close()connection.close()}}

观察上面代码会发现,每插入一天数据都会创建一个连接对象,会导致性能很差,数据太大会导致mysql崩溃,需要进行优化

使用foreachPartition对每个分区集合做操作
//3.保存数据(优化)//foreachPartition对每个分区集合做操作dataRDD.foreachPartition(datas =>{//data是一个集合不涉及网络交互//连接对象(把连接对象创建在这里,是以每个区为单位,多少个区就会创建多少个连接对象,相对来说效率高很多)//缺点:会出现oom(内存溢出 out of mana)(还没执行完数据就进来会出现内存溢出)Class.forName(driver)val connection:Connection = java.sql.DriverManager.getConnection(url, userName, passWd)datas.foreach({case (id,name,age) => {val sql = "insert into rdd(id,name,age) values (?,?,?)"val statement = connection.prepareStatement(sql)statement.setInt(1,id)statement.setString(2,name)statement.setInt(3,age)statement.executeUpdate()statement.close()}connection.close()})})

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

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

相关文章

【转】在无人值守程序(服务)中调用Microsoft Graph

什么是无人值守程序&#xff08;服务&#xff09; 我在此前用了几篇文章分别介绍了在桌面应用程序&#xff08;控制台&#xff09;&#xff0c;Web应用程序&#xff08;ASP.NET MVC&#xff09;&#xff0c;以及PowerSehll脚本中如何访问Microsoft Graph&#xff0c;今天这一篇…

MapReduce的shuffle阶段

Shuffle 为何需要shuffle • Reduce阶段的数据来源于不同的Map Shuffle由Map端和Reduce端组成 Shuffle的核心机制 • 数据分区排序 Map端 • 对Map输出结果进行spill Reduce端 • 拷贝Map端输出结果到本地 • 对拷贝的数据进行归并排序Shuffle Map端 Map端会源源不断的把数据输…

【转】使用PowerApps快速构建基于主题的轻业务应用 —— 入门篇

前言 在上一篇文章 基于Office 365的随需应变业务应用平台 中我提到&#xff0c;随着随需应变的业务需要&#xff0c;以及技术的发展&#xff0c;业务应用的开发的模式也有了深刻的变化。基于微软的平台&#xff0c;有服务于主干业务应用的Dynamic 365 业务应用平台&#xff0…

Spark内核源码学习(暂未学完)

1&#xff09; 回顾 1.1 Spark通用运行流程概述 在submit任务条件是需要指定executo个数&#xff0c;executor-CUP个数&#xff0c;可以提高并行度。 什么是并行&#xff0c;什么是并发&#xff1f; 并发&#xff1a;假如有多个任务task&#xff0c;并行是在一个cup中&#x…

【转】使用PowerApps快速构建基于主题的轻业务应用 —— 进阶篇

在上一篇 使用PowerApps快速构建基于主题的轻业务应用 —— 入门篇 中&#xff0c;我用了三个实际的例子演示了如何快速开始使用PowerApps构建轻业务应用&#xff0c;你可能已经发现&#xff0c;我都是使用默认生成的设置&#xff0c;没有做任何修改。当然&#xff0c;那样做出…

Spark一些组件的定义

Driver program: 运行应用程序的main函数并创建SparkContext的进程 除了RDD的最终执行所写的业务逻辑&#xff0c;剩下的都在Driver里生成&#xff0c;Driver端执行action算子才会到开始执行所创建的DAG-RDD图。 Cluster manager&#xff1a; 用于获取集群资源外部服务 Mas…

【转】D365 FO第三方集成(二)---访问认证(获取访问令牌)

D365 FO 在github上发布了第三方访问D365 FO的示例代码&#xff0c;里面包含了各种调用示例&#xff0c;代码很清晰。https://github.com/microsoft/Dynamics-AX-Integration 这篇blog简单分析一下代码中获取访问令牌的部分代码。 与获取访问令牌相关的代码有两个类ClientConfi…

SparkSQL练习+理解+详解

def main(args: Array[String]): Unit {//创建配置对象val conf new SparkConf().setAppName("SparkSQL01_demo").setMaster("local[*]")val session SparkSession.builder().config(conf).getOrCreate()//创建RDD (session里包含sparkContext&#xf…

【转】D365 FO第三方集成(三)---服务实现

D365 FO的Custom Service的实现比AX2012简单了很多。 AX2012服务方法要用属性SysEntryPointAttribute标记&#xff0c;添加到Services以后&#xff0c;还要发布服务并在系统管理入站端口添加操作&#xff0c;服务运行在CIL下&#xff0c;所以每次改动服务方法的代码都要增量生成…

SparkSQL自定义AVG强类型聚合函数与弱类型聚合函数汇总

AVG是求平均值&#xff0c;所以输出类型是Double类型 1&#xff09;创建弱类型聚合函数类extends UserDefinedAggregateFunction class MyAgeFunction extends UserDefinedAggregateFunction {//函数输入的数据结构&#xff0c;需要new一个具体的结构对象&#xff0c;然后添加…

PHP连接sql seaver数据库

我的PHP版本7.0 通过sqlsrv系列函数&#xff0c;需要下载安装Microsoft Drivers for PHP for SQL Server驱动&#xff1a; 地址&#xff1a;https://msdn.microsoft.com/library/dn865013.aspx。 根据自己需求下载安装&#xff0c;安装地址php下ext目录下&#xff0c;我的是4.0…

【转】D365 FO第三方集成(四)---客户端调用

客户端调用json-based服务非常简单&#xff0c;就是标准的http调用。 http调用首先要解决URL的组成&#xff0c;D365 FO json-based调用的url组成如下&#xff1a; https://usnconeboxax1aos.cloud.onebox.dynamics.cn/api/services/{服务组名}/{服务名}/{方法名} 调用的代码很…

NoSql理解+传统关系型数据库ACID+Nosql的CAP+BASE的理解

1&#xff09;什么是Nosql NoSQL(NoSQL Not Only SQL )&#xff0c;意即“不仅仅是SQL”&#xff0c; 泛指非关系型的数据库。随着互联网web2.0网站的兴起&#xff0c;传统的关系数据库在应付web2.0网站&#xff0c;特别是超大规模和高并发的SNS类型的web2.0纯动态网站已经显…

ztree 点击重载 layui table

ztree 点击重载 layui table <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <HTML> <HEAD><TITLE> ztree_demo </TITLE><meta http…

【转】D365 FO第三方访问https证书问题

D365FO采用https&#xff0c;第三方通过API调用的时候&#xff0c;客户端不见得信任D365FO的证书&#xff0c;调用时候会报 基础连接已关闭&#xff0c;发送时发生错误&#xff0c;调用堆栈如下&#xff1a; 1 at System.Net.Sockets.NetworkStream.Read(Byte[] buffer, Int…

数据结构与算法 - 稀疏数组(理解+代码实现案例)

举例 稀疏数组第一行是原数据几行几列和几个有效数据的个数 下面的行是各个有效数组的行列与具体值 稀疏数组实现 代码实现 package DataStructures.sparsearray;/*** 二维数组转稀疏数组 与 稀疏数组转成二维数组*/ public class SparseArray {public static void main(Stri…

php检测字符长度(中文)

strlen() mb_strlen() mb_strlen并不是PHP核心函数&#xff0c;使用前需要确保在php.ini加载了php_mbstring.dll&#xff0c;并开启extensionphp_mbstring.dll $str中文asd12;echo strlen($str).<br>;//11echo mb_strlen($str,utf8).<br>;//7

【转】Magento2 数据库操作

直接操作数据库 $objectManager \Magento\Framework\App\ObjectManager::getInstance(); $resource $objectManager->get(Magento\Framework\App\ResourceConnection); $connection $resource->getConnection(); $tableName $resource->getTableName(employee); …

数据结构 - 队列(非环形队列,以及优化成环形队列)

1&#xff09;队列的定义与实现形式-方式 2&#xff09;队列实现思路&#xff08;非环形&#xff0c;下面进行优化&#xff09; 3&#xff09;代码实现&#xff08;注意并不是环形&#xff09; package DataStructures.queue;import java.util.Scanner;/*** 使用数组模拟队列*…

爬取网易云音乐歌曲特色榜单信息

网易云音乐(iframe内的歌单) 刚开始学习做下记录 需要先下载好所需浏览器内核 我时谷歌&#xff0c;下载地址 http://chromedriver.storage.googleapis.com/index.html 然后没了&#xff0c;自己F12扒拉下就行了 运行&#xff1a; 左侧随便点击一个榜单后&#xff0c;复制ur…