sparkToMysql(join)

Spark 连接mysql 执行数据查询操作实战--多表查询 系统环境:本地虚拟机(Ubuntu 14 6G内存,2核CPU) 数据量:dat_order_item 240W记录,dat_order 1.4W记录 操作:(1)dat_order_item 和 dat_order 通过表order_id进行连接 (2)对dat_order_item表按item_code,item_type , item_insu_type三个字 阅读详情

计算不同商品的销售总价

package com.ws.orderCount

import java.sql.{Connection, DriverManager}

import com.google.gson.Gson
import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext}
import org.slf4j.{Logger, LoggerFactory}

object OrderCount {
  val logger: Logger = LoggerFactory.getLogger(OrderCount.getClass)

  def main(args: Array[String]): Unit = {
    val conf = new SparkConf().setAppName("OrderCount").setMaster("local[*]")
    val sc = new SparkContext(conf)
    val orders: RDD[String] = sc.textFile("data/order.log")
    /*
    val gson = new Gson
    val orderDetail: RDD[(String, Double)] = orders.map(x => {
      (gson.fromJson(x, classOf[Order]).cid, gson.fromJson(x, classOf[Order]).money)
    })
    这样写会导致Task not serializable异常,需要把Gson放到map里
    21/01/26 20:55:18 INFO SparkContext: Created broadcast 0 from textFile at OrderCount.scala:11
    Exception in thread "main" org.apache.spark.SparkException: Task not serializable
    */
    // 读取一行--转换Gson--获取cid,money组成元组
    var cid: String = ""
    var money: Double = 0.0
    val allOrder: RDD[(String, Double)] = orders.map(x => {
      try {
        cid = (new Gson).fromJson(x, classOf[Order]).cid
        money = (new Gson).fromJson(x, classOf[Order]).money
      } catch {
        case _: Exception =>
          cid = "err"
          money = 0.0
          logger.error("pass json err => " + x)
      }
      (cid, money)
    })
    val orderDetail: RDD[(String, Double)] = allOrder.filter(_._1 != "err")
    // 先聚合 后join,这样效率高
    val sumedvalue: RDD[(String, Double)] = orderDetail.reduceByKey(_ + _)
    // 获取商品列表 与 商品cid关联
    val goodsType: RDD[(String, String)] = sc.parallelize(List(("1", "家具"), ("2", "手机"), ("3", "服装")), 2)
    val joinR: RDD[(String, (String, Double))] = goodsType.join(sumedvalue)
    val r: RDD[(String, Double)] = joinR.map(_._2)
    r.foreachPartition(writeToMysql)
    sc.stop()
  }

  val writeToMysql: Iterator[(String, Double)] => Unit = (it: Iterator[(String, Double)]) => {
    val conn: Connection =  DriverManager.getConnection("jdbc:mysql://dream3:3306/bigdata?characterEncoding=UTF-8", "root", "root")
    val statement = conn.prepareStatement("insert into order_count(id,name,money) values(null,?,?)")
    try {
      it.foreach(x=>{
        var i = 1
        statement.setString(1,x._1)
        statement.setDouble(2,x._2)
        statement.addBatch()
        if(i%100==0){
          statement.executeBatch()
        }
        i+=1
      })
      statement.executeBatch()
    } catch {
      case e:Exception =>
        e.printStackTrace()
        logger.error("insert err")
    } finally {
      if(statement!=null){
        statement.close()
      }

      if(conn!=null){
        conn.close()
      }
    }
  }
}

数据 

{"oid":"o123","cid": 1, "money": 600.0, "longitude":116.397128,"latitude":39.916527}
oid":"o112", "cid": 3, "money": 200.0, "longitude":118.396128,"latitude":35.916527}
{"oid":"o124", "cid": 2, "money": 200.0, "longitude":117.397128,"latitude":38.916527}
{"oid":"o125", "cid": 3, "money": 100.0, "longitude":118.397128,"latitude":35.916527}
{"oid":"o127", "cid": 1, "money": 100.0, "longitude":116.395128,"latitude":39.916527}
{"oid":"o128", "cid": 2, "money": 200.0, "longitude":117.396128,"latitude":38.916527}
{"oid":"o129", "cid": 3, "money": 300.0, "longitude":115.398128,"latitude":35.916527}
{"oid":"o130", "cid": 2, "money": 100.0, "longitude":116.397128,"latitude":39.916527}
{"oid":"o131", "cid": 1, "money": 100.0, "longitude":117.394128,"latitude":38.916527}
{"oid":"o132", "cid": 3, "money": 200.0, "longitude":118.396128,"latitude":35.916527}

结果

ArrayBuffer((手机,500.0), (服装,600.0), (家具,800.0))

 

MTK 人工智能生态系统 <一> 简介 Neuropilot 阅读详情

相关推荐

MarkDown简介(深度解析MarkDown用法)

欢迎使用Markdown编辑器写博客 本Markdown编辑器使用StackEdit修改而来,用它写博客,将会带来全新的体验哦: Markdown和扩展Markdown简洁的语法 代码块高亮 图片链接和图片上传 LaTex数学公式 UML序列图和流程图 离线写博客 导入导出Markdown文件 丰富的快捷键 快捷键 加粗 Ctrl + B 斜体 Ctrl + I...

酷酷的旭 7344

spark读写mysql数据量大_spark写数据到Mysql

1、使用c3p0这个主要是因为c3p0实现了序列化,这样就可以直接传输到Worker上ComboPooledDataSource这个类主要是用来做生成数据库连接实例的,让它传到Worker上就可以直接使用了2、业务代码获取datasourcedef getC3p0DateSource(filename:String,config:String): ComboPooledDataSource ={v...

weixin_39575648的博客 612

Zemax单模光纤耦合仿真避坑指南:数值孔径、模式匹配与镀膜影响详解

本文详细解析了Zemax单模光纤耦合仿真中的关键避坑要点,包括数值孔径的多重定义与换算、模式匹配度评估及镀膜影响分析。通过实际案例和技术公式,帮助工程师避免常见仿真误差,提升激光通信和光纤传感系统的设计精度。特别针对OpticStudio用户提供了实用的参数设置建议和优化策略。

weixin_30836759的博客 466

Spark SQL join的三种实现方式

join是SQL中的常用操作,良好的表结构能够将数据分散到不同的表中,使其符合某种规范(mysql三大范式),可以最大程度的减少数据冗余,更新容错等,而建立表和表之间关系的最佳方式就是join操作。对于Spark来说有3种Join的实现,每种Join对应的不同的应用场景(SparkSQL自动决策使用哪种实现范式):1.Broadcast Hash Join:适合一张很小的表和一张大表进行Join;2.Shuffle Hash Join:适合一张小表(比上一个大一点)和一张大表进行Join;

一群专业码农的笔记本 1519

从零开始Cubemx配置STM32搭载freeRTOS以及lwip实现tcp网络通信(二)

Cubemx配置LWIP,实现网络通信

qq_30623327的博客 1万+

几率大的Redis面试题(含答案)

本文的面试题如下: Redis 持久化机制 缓存雪崩、缓存穿透、缓存预热、缓存更新、缓存降级等问题 热点数据和冷数据是什么 Memcache与Redis的区别都有哪些? 单线程的redis为什么这么快 redis的数据类型,以及每种数据类型的使用场景,Redis 内部结构 redis的过期策略以及内存淘汰机制【~】 Redis 为什么是单线程的,优点 如何解决redis的并发竞争key问题 Red...

睶 38万+

Spark-mysql-to-mysql

maven <properties> <maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target> <scala.version>2.12.10</scala.version> <spark.version>3

木卫二号的专栏 1839

AI Olympics:面向真实决策的不完全信息博弈评测框架

在人工智能落地实践中,传统基准测试(如MMLU、GSM8K)擅长评估知识调用与静态推理能力,却难以衡量模型在动态、模糊、高代价的真实场景中的策略决策水平。AI Olympics正是为弥补这一断层而生——它以扑克、狼人杀等社会性博弈为载体,系统考察模型在不完全信息下的对手建模、欺骗检测、多步序贯推理与代价敏感执行等核心能力。其技术价值在于将‘黑箱决策’转化为可追踪、可归因、可压力测试的动态思维图谱(DTG),支撑金融风控、智能客服、交通调度等强交互业务场景的能力诊断与持续优化。

weixin_30983965的博客 298

【Spark】spark读取、插入Mysql

【代码】【Spark】spark读取、插入Mysql。

Just Do IT 765

博途PLC模糊PID控制(附SCL完整源代码)

操作人员根据对象的当前状态和以往的控制经验,用手动控制的方法给出适当的控制量,对被控对象进行控制。用电脑模拟操作人员手动控制的经验,对被控对象进行控制。用模糊数学的知识模仿人脑的思维方式,对模糊现象进行识别和判决,给出精确的控制量,对被控对象进行控制。与经典控制理论和现代控制理论相比,模糊控制的特点是不需要建立对象的精确模型。根据操作人员手动控制的经验,总结的完整控制规则,在根据系统当前的运行状态,经过模糊推理,模糊判决等运算,求出控制量,实现对被控对象的控制。......

RXXW_Dor的博客 8967

看28377代码笔记

使用的是20MHz外部晶振,为取200MHz系统时钟,倍频设为20,分频设为2,这样sysclock = 20MHz * 20 / 2,正好200MHz。注意:SPISTE配置成普通的GPIO端口,是为了更好控制芯片,配置芯片的时序。FMULT_0:小数点位数,小数只能有0,0.25,0.5,0.75四个选择。XTAL_OSC:表示使用外部晶振。GPIO_MUX_CPU1:复用类型。GPIO_MUX_CPU1:复用类型。PLLCLK_BY_2:表示2分频。IMULT_20:表示倍频数。

小柚子的博客 807

将sparkSql结果导入到mysql中

/url路径格式jdbc:mysql://localhost:3306/数据库名。//第一个参数是url路径,第二个参数是表名,第三个参数是配置文件。注:这张表不用提前创建,数据库中不要有这张表,很重要!//写你要将内容放在哪张表里,表不用提前创建。如果忘了参数,可以ctrl+p,查看参数。将以上三个参数写在咱们一开始说的方法中。想要将数据存入到mysql需要如下操作。上面是DataFrame运行的结果。//df9是DataFrame名。//配置你们数据库用户名和密码。接下来就是写括号里面的参数。

2301_79197199的博客 973

Spark Catalog详解

旁边的实习生说:我想要用spark代码中对hive库中的内部表和外部表进行删除(包括数据),咋感觉网上搜了一圈都找不到解决方案啊,spark这么鸡肋吗?我:你应该静下心来好好把spark基础知识进行全面学习。实习生:难道spark有这功能,而我没有学习过?咋弄啊?我:学习一下Spark Catalog。实习生:啥是Catalog啊?Spark Catalog是Spark SQL中的一个元数据管理组件,它提供了一个集中化的存储和查询表、视图和函数的位置。

SunnyRivers 1814

将spark的数据保存到MySQL

我们用spark对数据进行分析和提取数据后要对得到的数据进行保存接下来的内容是将数据保存到MySQL数据库中。

yujinlong2002的博客 1884

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

SparkSQL(7):Hive和mysql数据源读取数据,然后join并且输出HDFS实例

一、实现功能 配置Spark到hive和mysql的链接,然后读取数据,最终结果输出存储到hive中。 二、环境条件 1.hdfs 2.metastore 3.mysql 三、实现功能 1.从hive中读取数据 // 1. 创建上下文 val conf = new SparkConf() .setMaster("local[*]") .setAppName...

小蚯蚓的博客 2380

pscad IEEE标准系统搭建说明

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

rdd与mysql表 join_spark三种连接join

本文主要介绍spark join相关操作。讲述spark连接相关的三个方法join,left-outer-join,right-outer-join,在这之前,我们用hiveSQL先跑出了结果以方便进行对比。我们以实例来进行说明。我的实现步骤记录如下。1、数据准备2、HSQL描述3、Spark描述1、数据准备我们准备两张Hive表,分别是orders(订单表)和drivers(司机表),通过dri...

weixin_39611754的博客 465

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

SparkSQL学习(三)SparkSQL读取Mysql的两种方式

第一种:package Mysql import java.util.Properties import org.apache.spark.sql.DataFrame import org.apache.spark.sql.hive.HiveContext import org.apache.spark.{SparkConf, SparkContext} object SparkSQL1 ...

potter 8988

Spark利用hive与MySQL外部数据源做join

MySQL端 使用dept表,表内容如下: mysql&gt; select * from dept -&gt; ; +--------+------------+----------+ | deptno | dname | loc | +--------+------------+----------+ | 10 | ACCOUNTING | NEW YO...

weixin_39216383的博客 793

Spark DataFrame、DataSet、SparkToHive、SparkToMysql

目录 DataFrameDemo DataSetDemo SparkToHive SparkToMysql DataFrameDemo package cn.kgc.ds import org.apache.spark.SparkContext import org.apache.spark.rdd.RDD import org.apache.spark.sql.{DataFrame, Row, SparkSession} import org.apache.spark......

liuyongsheng666的博客 255

Spark SQL将数据写入Mysql表的一些坑

Spark SQL将数据写入Mysql表的一些坑

dai451954706的专栏 4万+

pyspark写入mysql内存溢出_解决spark大量多次join计算导致的内存溢出

异常再现:从mysql取出数据,然后大量的聚合和join计算。大量的下面代码vardsTmp=ds2.where("RANK<=10").select("ID")ds1=ds1.join(ds1.join(dsTmp,"ID").groupBy("C_ID","S_ID").agg(round(avg("SCORE"),2).as("SCORE_AVG")),Seq("C_ID","S...

weixin_35662417的博客 1178

Spark SQL通过JDBC连接MySQL读写数据

Spark SQL通过JDBC连接MySQL读写数据 来源:传智播客云计算学科 转自:http://heb.itcast.cn/news/20151229/16012088060.shtml?qq-pf-to=pcqq.discussion Spark SQL通过JDBC连接MySQL读写数据 Spark SQL可以通过JDBC从关系型数据库中读取数据的方式创建DataFr

hjw199089的博客 7394

Spark SQL 之 Join 实现

原文地址:Spark SQL 之 Join 实现 Spark SQL 之 Join 实现 涂小刚2017-07-19217标签:spark,数据库 Join作为SQL中一个重要语法特性,几乎所有稍微复杂一点的数据分析场景都离不开Join,如今Spark SQL(Dataset/DataFrame)已经成为Spark应用程序开发的主流,作为开发者,我们有必要了解Jo...

weixin_30258027的博客 989

Spark:连接MySQL

spark-shell或spark-submit,载入jdbc的jar包: --jars /mysql-connector-java-*-bin.jar spark使用jdbc读写数据库: //读数据库 import java.util.Properties val prop = { val p = new Properties() ...

weixin_34250709的博客 401

Spark SQL外部数据源综合使用(Hive和MySQL进行Join)

前置文章: Spark SQL External Data Source 产生背景 &amp; 概述 &amp; 目标 &amp; 使用 Spark SQL整合Hive使用 先在MySQL中创建数据库、表: mysql&gt; create database spark; mysql&gt; use spark; mysql&gt; CREATE TABLE DEPT( DEPTNO i...

呼呼的小窝 2956

SparkSql -join及写入mysql

package com.wedoctor.sparksql import java.io.InputStream import java.util.Properties import com.typesafe.config.{Config, ConfigFactory} import org.apache.log4j.{Level, Logger} import org.apache.spa...

我的祖传代码 570
上一篇: java-scala
下一篇: action
JNWsong
博客等级 码龄9年 287粉丝 204原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值