如何使用SparkSql
一、SparkSql的前世今生
Hive->Shark->Spark SQL
二、SparkSql依赖
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-sql_2.11</artifactId>
<version>2.1.2</version>
</dependency>
三、SparkSql DataFrame
DataFrame,以列的形式组织的,分布式的数据集合。它其实和关系型数据库中的表非常类似,但是底层做了很多的优化。DataFrame可以通过很多来源进行构建,包括:结构化的数据文件,Hive中的表,外部的关系型数据库,以及RDD。
四、创建SQLContext
val sqlContext = SparkSession.builder().appName("RDD2DataFrameReflection").master("local").getOrCreate;
五、SparkSql创建DataFrame
val properties = new Properties();
properties.setProperty("user", "root");
properties.setProperty("password", "root");
val testDF = sqlContext.read.jdbc("jdbc:mysql://localhost:3306/test", "user", properties);
val testDF =sqlContext.read
.format("jdbc")
.option("url", "jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8")
.option("user", "root")
.option("password", "root")
.option("dbtable","user")
.option("dbtable","(select id from user where id < 50) as t") // sql语句必须是子查询
.load()
六、SparkSql DataFrame的操作
// 查询
testDF.show()
testDF.printSchema()
testDF.select("username").show()
testDF.select(testDF("username"), testDF("id") + 1).show()
testDF.filter(testDF("id") % 2 === 0).show()
testDF.groupBy("sex").count().show
七、RDD转换为DataFrame
1、使用反射来推断包含了特定数据类型的RDD的元数据
case class Student(id: Int, name: String, age: Int) // 定义模式类,属性名对应数据表的字段名
// RDD.toDF()转换为DataFrame
val studentDF = sc.textFile("data/students.txt", 1)
.map { line => line.split(",") }
.map { arr => Student(arr(0).trim().toInt, arr(1).trim(), arr(2).trim().toInt) }
.toDF()
//.map { arr => (arr(0).trim().toInt, arr(1).trim(), arr(2).trim().toInt) }
//.toDF("id", "name", "age")
val properties = new Properties()
properties.setProperty("user", "root")
properties.setProperty("password", "root")
studentDF.write.mode(SaveMode.Append).jdbc("jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8","student",properties);
2、编程方式使用Row将RDD转换为DataFrame
// 第一步,构造Row数据
val studentRDD = sc.textFile("data/students.txt", 1)
.map { line => Row(line.split(",")(0).toInt, line.split(",")(1), line.split(",")(2).toInt) }
// 第二步,构造元数据
val structType = StructType(Array(
StructField("id", IntegerType, true),
StructField("name", StringType, true),
StructField("age", IntegerType, true)))
// 第三步,转换RDD为DataFrame
val studentDF = sqlContext.createDataFrame(studentRDD, structType)
八、读入每个数据源,生成一个临时视图,通过一个sql去操作这些视图
val studentScoreDF = sqlContext.read.json("data/student_score.json");
studentScoreDF.createOrReplaceTempView("student_score");
val studentInfoDF = sqlContext.read.json("data/student_info.json")
studentInfoDF.createOrReplaceTempView("student_info")
val goodStudentInfoDF = sqlContext.sql("select s.name, s.score, i.gender from student_score s, student_info i where s.score>80 and s.name=i.name");
goodStudentInfoDF.rdd.collect().foreach(row => println(row(0) + " " + row(1) + " " + row(2)))
goodStudentInfoDF.write.json("data/result/goodstudents")
九、SparkSql UDF用户自定义函数
UDAF:User Defined Aggregate Function。用户自定义聚合函数
相关文章:
如何使用SparkSql
一、SparkSql的前世今生 Hive->Shark->Spark SQL 二、SparkSql依赖 <dependency> <groupId>org.apache.spark</groupId> <artifactId>spark-sql_2.11</artifactId> <version>2.1.2</version> </dependency> 三、…...
YOLOv8实战人员跌倒检测
本文采用YOLOv8作为核心算法框架,结合PyQt5构建用户界面,使用Python3进行开发。YOLOv8以其高效的实时检测能力,在多个目标检测任务中展现出卓越性能。本研究针对人员跌倒目标数据集进行训练和优化,该数据集包含丰富人员跌倒图像样…...
QT-TCP-server
为了实现高性能的TCP通讯,以下是一个基于Qt的示例,展示如何利用多个线程、非阻塞I/O、数据分块和自定义协议进行优化。该示例以TCP服务器和客户端的形式展示,能够承受高负载并实现快速数据传输。 高性能TCP Server示例 #include <QTcpSe…...
【STM32+QT项目】基于STM32与QT的智慧粮仓环境监测与管理系统设计(完整工程资料源码)
视频演示: 基于STM32与QT的智慧粮仓环境监测与管理系统设计 目录: 目录 视频演示: 目录: 前言:...
robot 仿真环境安装测试 [持续更新]
将持续更新各种robot simulation环境的安装过程. RLBench 安装CoppeliaSim、PyRep、RLBench git: https://github.com/stepjam/RLBench/tree/master (1)CoppeliaSim sudo gedit ~/.bashrc设置环境变量 export COPPELIASIM_ROOT=${HOME}/CoppeliaSim export LD_LIBRARY_…...
【FlutterDart】 拖动边界线改变列宽类似 vscode 那种拖动改变编辑框窗口大小(11 /100)
【Flutter&Dart】 拖动改变 widget 的窗口尺寸大小GestureDetector~简单实现(10 /100) 【Flutter&Dart】 拖动边界线改变列宽并且有边界高亮和鼠标效果(12 /100) 上效果: 这个在知乎里找到的效果&…...
R语言的循环实现
以R语言的循环实现 引言 R语言作为一种强大的统计分析和数据可视化工具,广泛应用于数据科学、统计学和机器学习等领域。在R语言中,循环是一个基本的控制结构,用于重复执行一段代码。循环不仅可以提高代码的可读性,还可以方便地处…...
Web应用安全-漏洞扫描器设计与实现
摘 要 随着Web2.0、社交网络、微博等一系列新型的互联网产品的诞生,基于Web环境的互联网应用越来越广泛,企业信息化的过程中各种应用都架设在Web平台上。Web应用的迅速发展也引起黑客们的强烈关注,接踵而至的就是Web安全威胁的凸显ÿ…...
视频生成Sora的全面解析:从AI绘画、ViT到ViViT、TECO、DiT、VDT、NaViT等
前言 真没想到,距离视频生成上一轮的集中爆发(详见《Sora之前的视频生成发展史:从Gen2、Emu Video到PixelDance、SVD、Pika 1.0》)才过去三个月,没想OpenAI一出手,该领域又直接变天了 自打2.16日OpenAI发布sora以来(其开发团队包…...
【已解决】如何让容器内的应用程序使用代理?
首先,按照这种配置方法,即通过在 /etc/systemd/system/docker.service.d/http-proxy.conf 中设置代理,它只会影响 Docker 守护进程本身,并不会自动影响 Docker 容器内部的软件或容器中的网络行为。 这意味着: Docker …...
DC/AC并网逆变器模型与仿真MATLAB
DC/AC并网逆变器是一种将直流电(DC)转化为交流电(AC),并将其与电网并联的设备。它的核心功能是实现直流电源(如光伏电池板或储能电池)与电网的有效连接,同时保证输出电能质量满足电网…...
P10424 [蓝桥杯 2024 省 B] 好数
题目描述 一个整数如果按从低位到高位的顺序,奇数位(个位、百位、万位……)上的数字是奇数,偶数位(十位、千位、十万位……)上的数字是偶数,我们就称之为“好数”。 给定一个正整数 N…...
【Word_笔记】Word的修订模式内容改为颜色标记
需求如下:请把修改后的部分直接在原文标出来,不要采用修订模式 步骤1:打开需要转换的word后,同时按住alt和F11 进入(Microsoft Visual Basic for Appliations) 步骤2:插入 ---- 模块 步骤3:输入以下代码,点击运行 Sub HighlightInsertedText() Dim r As Revision…...
oracle位运算、左移右移、标签算法等
文章目录 位运算基础与或非同或同或应用场景 异或异或应用场景 什么是真值表 oracle基础函数创建bitor(按位或)函数bitnot(按位非)函数bitxor(按位异或)函数左移函数BITSHIFT()函数(实测不可用,废弃掉该方案)右移函数(略,有此场景吗?) 实际应用资质字典…...
spring boot学习第二十三篇:Spring Boot集成RocketMQ
前置条件先安装好RocketMQ 希望在Window10安装rocketMQ并简单使用,可以参考如下文章: Window10安装rocketMQ并简单使用-CSDN博客 1、pom.xml文件里面加上依赖 <dependency><groupId>org.apache.rocketmq</groupId><artifactId&…...
去掉el-table中自带的边框线
1.问题:el-table中自带的边框线 2.解决后的效果: 3.分析:明明在el-table中没有添加border,但是会出现边框线. 可能的原因: 由 Element UI 的默认样式或者表格的某些内置样式引起的。比如,<el-table> 会通过 border-collapse 或 border-spacing 等属性影响边框的显示。 4…...
C语言gdb调试
目录 1.gdb介绍 2.设置断点 2.1.测试代码 2.2.设置函数断点 2.3.设置文件行号断点 2.4.设置条件断点 2.5.多线程调试 3.删除断点 3.1.删除指定断点 3.2.删除全部断点 4.查看变量信息 4.1.p命令 4.2.display命令 4.3.watch命令 5.coredump日志 6.总结 1.gdb介绍…...
Spring项目创建流程及配置文件bean标签参数简介
Spring文档根目录——里面可以找到所有版本 1. 项目搭建流程 1. pom.xml中引入依赖Spring-webMVC <!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc --><dependency><groupId>org.springframework</groupId><artif…...
reactor中的并发
1. reactor中的并发有两种方式 1.1 flatmap,底层是多线程并发处理。在reactor的演讲中,flatmap对于io类型的并发效果较好. flamap有两个参数: int concurrency, int prefetch。分别代表并发的线程数和缓存大小 注意凡是参数中有prefetch的,都…...
太速科技-418-基于AD9361 +ZYNQ7020 的软件无线电 SDR 套件
基于AD9361 ZYNQ7020 的软件无线电 SDR 套件 一、板卡信息 ● ZYNQ芯片采用XC7Z020,逻辑容量更大,支持更大的逻辑设计; ● 内存采用两片512M DDR3,共1GByte,更大容量。 ● 支持千兆网口,支持ZEDFMCO…...
椭圆曲线密码学(ECC)
一、ECC算法概述 椭圆曲线密码学(Elliptic Curve Cryptography)是基于椭圆曲线数学理论的公钥密码系统,由Neal Koblitz和Victor Miller在1985年独立提出。相比RSA,ECC在相同安全强度下密钥更短(256位ECC ≈ 3072位RSA…...
MFC内存泄露
1、泄露代码示例 void X::SetApplicationBtn() {CMFCRibbonApplicationButton* pBtn GetApplicationButton();// 获取 Ribbon Bar 指针// 创建自定义按钮CCustomRibbonAppButton* pCustomButton new CCustomRibbonAppButton();pCustomButton->SetImage(IDB_BITMAP_Jdp26)…...
智能在线客服平台:数字化时代企业连接用户的 AI 中枢
随着互联网技术的飞速发展,消费者期望能够随时随地与企业进行交流。在线客服平台作为连接企业与客户的重要桥梁,不仅优化了客户体验,还提升了企业的服务效率和市场竞争力。本文将探讨在线客服平台的重要性、技术进展、实际应用,并…...
从零开始打造 OpenSTLinux 6.6 Yocto 系统(基于STM32CubeMX)(九)
设备树移植 和uboot设备树修改的内容同步到kernel将设备树stm32mp157d-stm32mp157daa1-mx.dts复制到内核源码目录下 源码修改及编译 修改arch/arm/boot/dts/st/Makefile,新增设备树编译 stm32mp157f-ev1-m4-examples.dtb \stm32mp157d-stm32mp157daa1-mx.dtb修改…...
现代密码学 | 椭圆曲线密码学—附py代码
Elliptic Curve Cryptography 椭圆曲线密码学(ECC)是一种基于有限域上椭圆曲线数学特性的公钥加密技术。其核心原理涉及椭圆曲线的代数性质、离散对数问题以及有限域上的运算。 椭圆曲线密码学是多种数字签名算法的基础,例如椭圆曲线数字签…...
ABAP设计模式之---“简单设计原则(Simple Design)”
“Simple Design”(简单设计)是软件开发中的一个重要理念,倡导以最简单的方式实现软件功能,以确保代码清晰易懂、易维护,并在项目需求变化时能够快速适应。 其核心目标是避免复杂和过度设计,遵循“让事情保…...
Go语言多线程问题
打印零与奇偶数(leetcode 1116) 方法1:使用互斥锁和条件变量 package mainimport ("fmt""sync" )type ZeroEvenOdd struct {n intzeroMutex sync.MutexevenMutex sync.MutexoddMutex sync.Mutexcurrent int…...
比较数据迁移后MySQL数据库和OceanBase数据仓库中的表
设计一个MySQL数据库和OceanBase数据仓库的表数据比较的详细程序流程,两张表是相同的结构,都有整型主键id字段,需要每次从数据库分批取得2000条数据,用于比较,比较操作的同时可以再取2000条数据,等上一次比较完成之后,开始比较,直到比较完所有的数据。比较操作需要比较…...
MySQL 主从同步异常处理
阅读原文:https://www.xiaozaoshu.top/articles/mysql-m-s-update-pk MySQL 做双主,遇到的这个错误: Could not execute Update_rows event on table ... Error_code: 1032是 MySQL 主从复制时的经典错误之一,通常表示ÿ…...
uni-app学习笔记三十五--扩展组件的安装和使用
由于内置组件不能满足日常开发需要,uniapp官方也提供了众多的扩展组件供我们使用。由于不是内置组件,需要安装才能使用。 一、安装扩展插件 安装方法: 1.访问uniapp官方文档组件部分:组件使用的入门教程 | uni-app官网 点击左侧…...
