spark复习笔记(7):sparkSQL
一、saprkSQL模块,使用类sql的方式访问Hadoop,实现mr计算,底层使用的是rdd
1.hive //hadoop mr sql
2.phenoix //hbase上构建sql的交互过程
该模块能在spark上运行sql语句
3.DataFrame //数据框,表
在spark中的数据框,sparkSQL就能以完全分布式的方式来处理数据。组合数据框可以来自各种数据源来进行查询的处理
4.SparkSQL //SQL | DataFrame API
5.RDD[Customer]===>
$scala>df=sc.createDataFrame(rdd);
$scala>df = sc.createDataFrame(rdd);
//创建样例类
$scala>case class Customer1(id:Int,name:String,age:Int)
//构造数据
$scala>val arr = Array("1,tom,12","2,tomas,13","3,tomasLee,14")
$scala>val rdd1 = sc.makeRDD(arr)
//创建对象RDD
$scala>val rdd2=rdd1.map(e=>{
val arr= e.split(",");
Customer1(arr(0).toInt,arr(1),arr(2).toInt)
})
//创建customer的rdd,通过rdd创建数据框
$scala>val df = spark.createDataFrame(rdd2)
//打印表结构
//创建临时视图
$scala>df.createTempView("customers")
//打印表结构
$scala>df.printSchema
$scala>df.show //等价于查询数据
//创建临时视图
$scala>df.createTempView("customers")
//使用sparkSQL来进行相关的查询
val df2 = spark.sql("select * from customers")
//将上述结果进行相关的显示
df2.show
//带条件进行相关的查询
val df2 = spark.sql("select * from customers where id<2")
df2.show
//或者用如下的方式直接show
spark.sql("select * from customer").show
val df1 = spark.sql("select * from customer where id<2")
val df2 = spark.sql("select * from customers where id>2")
df1.show
df2.show
df.create
df1.createTempView("c1")
df2.createTempView("c")
val dff = spark.sql("select * from c1 union select * from c2")
dff.show //显示前面查询的结果
$scala>spark.sql("select * from c1 from union select *from c2").show
df1.union(df2).show
spark.sql("select count(*) from customer").show
spark.sql("select * from customer limit 1").show
spark.sql("select *from customers where name like 't%' order by name desc").show
//映射聚合操作
df.map(_.getAs[Int]("age")).reduce(_ + _)
//聚合函数
df.agg(sum("age"),max("age"),min("age"))
sparkQSL :使用类似SQL方式访问hadoop,实现MR计算。RDD
df= sc.createDataFrame(rdd);
DataSet<Row> ===DataFrame===>//类似于table操作
保存spark的sql计算结果(json)
JavaRDD<Row> rdd = df1.toJava();
保存spark的sql计算结果(json)
//保存成json文件。
df.write().json(dir) //这个地方写的是文件夹,就是保存文件的上级目录
//设置保存模式
df.mode(SaveMode.APPEND);
json文件的读写
---------------------------------
SparkSession.read().json("") //读取json文件形成数据框
//将数据框的数据写入json文件
SparkSession.write().json("........") //将数据框的数据写成json文件
SparkDataFrame以jdbc的方式操纵表
SparkDataFrame以jdbc的方式来操纵表
1.引入mysql驱动
pom.xml直接修改
spark整合Hive
1.hive的类库需要在spark的worker节点,他们也需要通过类库来访问hive
2.复制core-site.xml(hdfs) + hdfs-site.xml + hive-site.xml(hive)这三个文件复制到spark/conf目录下面
3.指定hive的home目录环境变量
4.赋值mysql驱动序列到/soft/spark/jars目录下面
5.启动spark-shell,指定启动模式
spark-shell --master local[4]
create table tt(id int,anme string,age int)
row format delimited fields terminated by ','
lines terminated by '\n' stored as textfile;
6.SparkSQL操纵Hive表
(1)复制配置文件到resources目录下
core-site.xml
hdfs-site.xml
hive-site.xml
(2)pom.xml中增加依赖
(3)编码
package com.jd.spark.java; import org.apache.spark.SparkConf;
import org.apache.spark.sql.Dataset;
import org.apache.spark.sql.Row;
import org.apache.spark.sql.SparkSession; public class SQLHiveJava {
public static void main(String[] args){
SparkConf conf = new SparkConf();
conf.setMaster("local").setAppName("SQLHive");
SparkSession sess = SparkSession.builder().appName("SQLHiveJava").config("spark.master","local").getOrCreate();
sess.sql("use mydb2.db");
Dataset<Row> df = sess.sql("select * from mydb2.tt");
df.show(); } }
分布式SQL引擎
--------------------------------------------
1.启动spark集群(完全分布式-standalone)
$>/soft/spark/sbin/start-all.sh
master //s11
worker //s12-s14
2.在默认库下创建hive数据表
hive -e "create table tt(id int,name string , age int) row format delimited fields terminated by ',' lines terminated by '\n' stored as textfile"
3.加载数据到hive表中去
$>hive -e "load data local inpath 'file:///home/centos/data.txt' into table tt"
4.分发三个文件到worker节点
5.启动spark集群
$>soft/spark/sbin/start-all.sh
6.启动spark-shell
$>spark-shell --master spark://s11:7070
7.启动thriftserver服务器
$>start
8.连接beeline进行操作:
beeline -u jdbc:hive://localhost:10000 -d org.apache.hive.jdbc.HiveDriver
spark复习笔记(7):sparkSQL的更多相关文章
- spark复习笔记(2)
之前工作的时候经常用,隔了段时间,现在学校要用学的东西也忘了,翻翻书谢谢博客吧. 1.什么是spark? Spark是一种快速.通用.可扩展的大数据分析引擎,2009年诞生于加州大学伯克利分校AMPL ...
- spark复习笔记(1)
使用spark实现work count ---------------------------------------------------- (1)用sc.textFile(" &quo ...
- spark复习笔记(7):sparkstreaming
一.介绍 1.sparkStreaming是核心模块Spark API的扩展,具有可伸缩,高吞吐量以及容错的实时数据流处理等.数据可以从许多来源(如Kafka,Flume,Kinesis或TCP套接字 ...
- spark复习笔记(6):RDD持久化
在spark中最重要的功能之一是跨操作在内存中持久化数据集.当你持久化一个RDD的时候,每个节点都存放了一个它在内存中计算的一个分区,并在该数据集的其他操作中进行重用,持久化一个RDD的时候,节点上的 ...
- spark复习笔记(6):数据倾斜
一.数据倾斜 spark数据倾斜,map阶段对key进行重新划分.大量的数据在经过hash计算之后,进入到相同的分区中,zao
- spark复习笔记(4):RDD变换
一.RDD变换 1.返回执行新的rdd的指针,在rdd之间创建依赖关系.每个rdd都有一个计算函数和指向父rdd的指针 Spark是惰性的,因此除非调用某个转换或动作,否则不会执行任何操作,否则将触发 ...
- spark复习笔记(5):API分析
0.spark是基于hadoop的mr模型,扩展了MR,高效实用MR模型,内存型集群计算,提高了app处理速度. 1.特点:(1)在内存中存储中间结果 (2)支持多种语言:java scala pyt ...
- spark复习笔记(4):spark脚本分析
1.[start-all.sh] #!/usr/bin/env bash # # Licensed to the Apache Software Foundation (ASF) under one ...
- spark复习笔记(3)
在windows上实现wordcount单词统计 一.编写scala程序,引入spark类库,完成wordcount 1.sparkcontextAPI sparkcontext是spark功能的主要 ...
随机推荐
- LeetCode--075--颜色分类(python)
给定一个包含红色.白色和蓝色,一共 n 个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色.白色.蓝色顺序排列. 此题中,我们使用整数 0. 1 和 2 分别表示红色.白色和蓝色. ...
- Jion的应用
- java生成图片验证码(转)--封装生成图片验证码的工具类
博客部分内容转载自 LonlySnow的博客:后台java 实现验证码生成 1.controller方法 @RequestMapping(value = "/verifycode/img&q ...
- 百度小程序 配置 app.json 文件
可以通过配置 app.json 文件,设置 SWAN 的界面.路径.多 TAB 等. app.json 配置项列表如下 属性 类型 必填 描述 pages Array.<string> 是 ...
- Linux内核设计与实现 总结笔记(第十二章)内存管理
内核里的内存分配不像其他地方分配内存那么容易,内核的内存分配不能简单便捷的使用,分配机制也不能太复杂. 一.页 内核把页作为内存管理的基本单位,尽管处理器最小寻址坑是是字或者字节.但是内存管理单元MM ...
- Dijkstra算法求最短路模板
Dijkstra算法适合求不包含负权路的最短路径,通过点增广.在稠密图中使用优化过的版本速度非常可观.本篇不介绍算法原理.只给出模板,这里给出三种模板,其中最实用的是加上了堆优化的版本 算法原理 or ...
- Redis 序列化方式StringRedisSerializer、FastJsonRedisSerializer和KryoRedisSerializer
当我们的数据存储到Redis的时候,我们的键(key)和值(value)都是通过Spring提供的Serializer序列化到数据库的.RedisTemplate默认使用的是JdkSerializat ...
- 前向渲染使用重叠Reflection Capture 造成的反射通道接缝问题
问题出现的条件: 使用UE4 4.16 使用Forward shading 使用多个Sphere Reflection Capture组件(有重叠的部分) 烘焙灯光后能看到明显的反射通道接缝 解决办法 ...
- 阿里云CentOS 7.3安装Redis详细步骤
############ 准备 ############### 从Redis官网下载Linux redis3.2.6版本,我下载的redis-3.2.6.tar.gz(目前最新稳定版),下载到/u ...
- 11 November
Weakness 求数列区间 \(\{a_n\}\) 中满足 \(i < j < k, a_i > a_j > a_k\) 的 \((i, j, k)\) 对的数目. 设对 \ ...