生产环境_Spark解析JSON字符串并插入到MySQL数据库

业务背景:      

  最近开发有一个需求,是这样的

        我需要将一段从前端传过来的JSON字符串进行解析,并从中提取出所需的数据,然后将这些数据插入到MySQL数据库中。

json格式样例如下

{ \"区域编号\": \"001\", \"区域名称\": \"测试区域\", \"速度\": \"50\", \"速度分数\": \"80\", \"gj\": \"中国\", \"区域顶点集\": \"[{'x': 1, 'y': 2}, {'x': 3, 'y': 4}]\" }"}

        spark代码会使用JsonPath库解析JSON数据将上面的json串解析,使用JsonPath.parsejsonStr解析为parsedJson对象。

        随后使用SparkSQL将这条数据写入mysql中特定的库表,其实还可以做一个优化的,比如入库前先判断有没有这条数据,如果有则不插入,如果没有就插入,优化这部分我没做,有时间在改吧。

    代码如下

  注意的是,只要配置好mysql的配置即可

import com.jayway.jsonpath.JsonPath
import java.sql.{Connection, DriverManager}
object area_sd_insert_v2 {def main(args: Array[String]): Unit = {// 初始化参数val jsonparam = "{\"jsonStr\": \"{ \\\"区域编号\\\": \\\"001\\\", \\\"区域名称\\\": \\\"测试区域\\\", \\\"速度\\\": \\\"50\\\", \\\"速度分数\\\": \\\"80\\\", \\\"gj\\\": \\\"中国\\\", \\\"区域顶点集\\\": \\\"[{'x': 1, 'y': 2}, {'x': 3, 'y': 4}]\\\" }\"}"println(jsonparam)val jsonStr = JsonPath.read[String](jsonparam, "$.jsonStr")val parsedJson = JsonPath.parse(jsonStr)val areaid = parsedJson.read[String]("$.区域编号")val areaName = parsedJson.read[String]("$.区域名称")val sd = parsedJson.read[String]("$.速度")val score = parsedJson.read[String]("$.速度分数")val gj = parsedJson.read[String]("$.gj")val areaPts = parsedJson.read[String]("$.区域顶点集")//by_matrix70,防止抄袭_20231216//博客主页   https://blog.csdn.net/qq_52128187?type=blogval host = "192.168.11.11"val port = "3306"val defaultCharset = "utf-8"val user = "root"val password = "123456789"val base = "test_1" // 数据库名val table = "table_20231216"val driver ="com.mysql.jdbc.Driver"val url = s"jdbc:mysql://$host:$port/$base?useUnicode=true&characterEncoding=$defaultCharset&useSSL=false"Class.forName(driver)val connection = DriverManager.getConnection(url, user, password)try {val statement = connection.createStatementval rowAffected = statement.executeUpdate(s"""INSERT INTO $table ('区域编号', '区域名称', '速度', '速度分数', 'gj', '区域顶点集')VALUES ('$areaid', '$areaName', '$sd', '$score', '$gj', '$areaPts')""")} finally {connection.close()}}
}

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

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

相关文章

什么是npm?

npm(全称Node Package Manager)是一个用于管理Node.js包和模块的命令行工具。它是一个包管理器,允许您在您的项目中方便地安装、管理和升级模块和依赖项。 npm已成为JavaScript生态系统中最流行的包管理器之一,它提供了一个庞大的…

不设默认值(js的问题)

给动态变量设置默认值是一个非常好的实践,可以预防发生意想不到的错误。下面是一个常见错误的例子: function addTwoNumbers(a, b) { ​​ console.log(a b); ​​} ​​addTwoNumbers(); ​​// NaN 结果是 "NaN",因为 a 是…

Mac brew install youtube-dl 【 youtube 下载工具:youtube-dl 安装】

文章目录 1. 简介2. 预备3. 安装4. 命令5. 测试 1. 简介 youtube-dl - 从youtube.com或其他视频平台下载视频 https://github.com/ytdl-org/youtube-dl 2. 预备 安装并配置 git安装 brew 3. 安装 MacBook-Pro ~ % brew install youtube-dl Warning: youtube-dl has been …

如何在PHP中使用PDO预处理语句?

在PHP中使用PDO(PHP Data Objects)来执行预处理语句是一种安全的方式来与数据库进行交互,以防止SQL注入攻击。以下是如何在PHP中使用PDO预处理语句的基本步骤: 建立数据库连接: 首先,您需要使用PDO建立与数…

蓝桥杯专题-真题版含答案-【国庆星期日】【三色棋】【蒙地卡罗法求 PI】【格雷码(Gray Code)】

Unity3D特效百例案例项目实战源码Android-Unity实战问题汇总游戏脚本-辅助自动化Android控件全解手册再战Android系列Scratch编程案例软考全系列Unity3D学习专栏蓝桥系列ChatGPT和AIGC 👉关于作者 专注于Android/Unity和各种游戏开发技巧,以及各种资源分…

JVM学习之类加载子系统

类加载子系统 类加载子系统负责从文件或者网络中加载Class文件,class文件在开头有特定的标识 ClassLoader只负责class文件的加载,是否可运行是执行引擎决定的 加载的类信息放在方法区。除了类信息之外,方法区也会放运行时常量池&#xff0c…

TCP报文头(首部)详解

本篇文章基于 RFC 9293: Transmission Control Protocol (TCP) 对TCP报头进行讲解,部分内容会与旧版本有些许区别。 TCP协议传输的数据单元是报文段,一个报文段由TCP首部(报文头)和TCP数据两部分组成,其中TCP首部尤其重…

7个精选的矢量数据库和搜索引擎项目

目录 矢量数据库简介1.Milvus相似性搜索引擎2.Qdrant下一代矢量数据库3.Chroma嵌入式数据库4.Weaviate矢量数据库5.RediSearch全文搜索引擎6.矢量数据库7.Vald分布式向量搜索引擎 矢量数据库简介 向量数据库是一种用于存储、检索和分析向量的数据库。在图片搜索、语音搜索等应…

基于EasyExcel的数据导入导出

前言: 代码复制粘贴即可用,主要包含的功能有Excel模板下载、基于Excel数据导入、Excel数据导出。 根据实际情况修改一些细节即可,最后有结果展示,可以先看下结果,是否是您想要的。 台上一分钟,台下60秒&a…

【数据在内存中的存储】

目录 整数在内存中的存储大小端字节序和字节序判断浮点数在内存中的存储 1. 整数在内存中的存储 整数的二进制表示方法有三种: 原码、反码和补码 三种表示方法均有符号位和数值位两部分,符号位0表示“正”,1表示"负",而数值位最高的一位被当做符号位,剩…

Java中的链式编程风格与应用案例

引言 链式编程是一种在编程中经常使用的风格,它可以使代码更加简洁、易读和易于维护。在Java中,链式编程可以通过方法链的方式来实现。本文将介绍Java中的链式编程风格,并通过几个应用案例来说明其实际应用。 一、链式编程的概念与特点 链式…

如何理解Rust语言中的“impl”关键字

在Rust编程语言中,impl是一个关键字,用于为类型实现方法和特性(traits)。impl关键字后面可以跟一个类型或者特性名称,然后在大括号中定义该类型或特性的具体实现。 当我们使用impl关键字为一个类型实现方法时&#xf…

Go实现MapReduce

背景 当谈到处理大规模数据集时,MapReduce是一种备受欢迎的编程模型。它最初由Google开发,用于并行处理大规模数据以提取有价值的信息。MapReduce模型将大规模数据集分解成小块,然后对这些小块进行映射和归约操作,最终产生有用的…

《工程数值计算Python教程》笔记

文章目录 [toc]第一章:绪论 1.1 1.1 1.1|数值计算在工程科学中的重要性 1.2 1.2 1.2|数值计算方法 1.3 1.3 1.3|程序设计盒图计算方法的选取减少运算次数避免相近的数相减 1.4 1.4 1.4|误差的来源、表示及传递误差的来源和分类模型误差观测误差截断误差舍入误差 误差…

RabbitMQ消息顺序性保障

RabbitMQ 没有属性设置消息的顺序性,只能设置消息的优先级,因此消息顺序性保障只能在 consumer 上实现 场景分析: 生产者向 RabbitMQ 里发送了三条数据, 顺序依次是 data1-> data2 -> data3,压入的是一个内存…

基于vue+element-plus+echarts制作动态绘图页面(柱状图,饼图和折线图)

前言 我们知道echarts是一个非常强大的绘图库,基于这个库,我们可以绘制出精美的图表。对于一张图来说,其实比较重要的就是配置项,填入不同的配置内容就可以呈现出不同的效果。 当然配置项中除了样式之外,最重要的就是…

1、什么是 Python?

Python是一门高级编程语言,它是一种通用、解释型、面向对象的语言,以其简洁、清晰的语法和强大的功能而备受程序员欢迎。在学习Python之前,让我们一起来了解一下这门语言的基本特性和应用领域。 Python的起源和命名 Python的故事始于上个世…

Stable Diffusion 微调及推理优化实践指南

随着 Stable Diffsuion 的迅速走红,引发了 AI 绘图的时代变革。然而对于大部分人来说,训练扩散模型的门槛太高,对 Stable Diffusion 进行全量微调也很难入手。由此,社区催生了一系列针对 Stable Diffusion 的高效微调方案&#xf…

python 安装

要在Linux上安装Python,您可以按照以下步骤进行操作: 打开终端。 使用以下命令检查系统是否已经安装了Python: bash python --version 如果已经安装了Python,将显示已安的Python版本。如果未安装Python或者版本较低,继…

CentOS新系统工具安装

时区设置 ## 查看当前时区 timedatectl | grep "Time zone" ## 查看时区列表 thiimedatectl list-timezones ## 设置时区 sudo timedatectl set-timezone Asia/ShanghaiCentOS7桌面怎么校准时间?(设置时区) 安装Docker 环境 # …