一、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的更多相关文章

  1. spark复习笔记(2)

    之前工作的时候经常用,隔了段时间,现在学校要用学的东西也忘了,翻翻书谢谢博客吧. 1.什么是spark? Spark是一种快速.通用.可扩展的大数据分析引擎,2009年诞生于加州大学伯克利分校AMPL ...

  2. spark复习笔记(1)

    使用spark实现work count ---------------------------------------------------- (1)用sc.textFile(" &quo ...

  3. spark复习笔记(7):sparkstreaming

    一.介绍 1.sparkStreaming是核心模块Spark API的扩展,具有可伸缩,高吞吐量以及容错的实时数据流处理等.数据可以从许多来源(如Kafka,Flume,Kinesis或TCP套接字 ...

  4. spark复习笔记(6):RDD持久化

    在spark中最重要的功能之一是跨操作在内存中持久化数据集.当你持久化一个RDD的时候,每个节点都存放了一个它在内存中计算的一个分区,并在该数据集的其他操作中进行重用,持久化一个RDD的时候,节点上的 ...

  5. spark复习笔记(6):数据倾斜

    一.数据倾斜 spark数据倾斜,map阶段对key进行重新划分.大量的数据在经过hash计算之后,进入到相同的分区中,zao

  6. spark复习笔记(4):RDD变换

    一.RDD变换 1.返回执行新的rdd的指针,在rdd之间创建依赖关系.每个rdd都有一个计算函数和指向父rdd的指针 Spark是惰性的,因此除非调用某个转换或动作,否则不会执行任何操作,否则将触发 ...

  7. spark复习笔记(5):API分析

    0.spark是基于hadoop的mr模型,扩展了MR,高效实用MR模型,内存型集群计算,提高了app处理速度. 1.特点:(1)在内存中存储中间结果 (2)支持多种语言:java scala pyt ...

  8. spark复习笔记(4):spark脚本分析

    1.[start-all.sh] #!/usr/bin/env bash # # Licensed to the Apache Software Foundation (ASF) under one ...

  9. spark复习笔记(3)

    在windows上实现wordcount单词统计 一.编写scala程序,引入spark类库,完成wordcount 1.sparkcontextAPI sparkcontext是spark功能的主要 ...

随机推荐

  1. Cloneable接口的作用与深度克隆与浅度克隆

    cloneable接口的作用 cloneable其实就是一个标记接口,只有实现这个接口后,然后在类中重写Object中的clone方法,然后通过类调用clone方法才能克隆成功,如果不实现这个接口,则 ...

  2. OC项目调用C++

    CPPHello.hpp #ifndef CPPHello_hpp #define CPPHello_hpp #include <stdio.h> class CPPHello { pub ...

  3. 【CF1252K】Addition Robot(线段树,矩阵乘法)

    题意: 思路:因为线段树上每一段的矩阵之积只有两种,预处理一下,翻转的时候下传tag然后把另一种可能性换上来就好 #include<bits/stdc++.h> using namespa ...

  4. 【CF1251E】Voting(贪心)

    题意:有n个人,需要搞到全部n个人的票,搞到第i个人的票有两种方式:之前已经搞到mi个人的票,或者直接花费pi 问最小的搞到所有票的总代价 n<=2e5,1<=p[i]<=1e9,0 ...

  5. UE4联网游戏中让不同的客户端生成不同的Pawn类型

    效果描述 一个服务器,两个客户端,让他们连接后分别生成不同的Pawn,并且在不同的位置生成. 意义 这是个项目需求,但是我发现如果能够彻底理解并制作出这个功能,会对虚幻4内置的网络功能以及一些重要的G ...

  6. Xyjj’s sequence

    Xyjj’s sequence #include<iostream> #include<cstdio> #include<cstring> #include< ...

  7. 克隆虚拟机启动网卡提示错误 Device eth0 does not seem to be present, delaying initialization

    错误原因: 克隆的Linux系统在新的机器上运行,新服务器网卡物理地址已经改变.而/etc/udev/rules.d/70-persistent-net.rules这个文件确定了网卡和MAC地址的信息 ...

  8. 洛谷P2657 windy数

    传送 裸的数位dp 看这个题面,要求相邻两个数字之差至少为2,所以我们记录当前填的数的最后一位 同时要考虑毒瘤的前导0.如果填的数前面都是0,则这一位填0是合法的. emmm具体的看代码叭 #incl ...

  9. qbzt day3 上午

    内容提要 堆 lca(最近公共祖先) st表 hash 并查集 树状数组 线段树 数据结构 1.堆 Priority_queue 他滋兹:插入删除查询最大值(最小值) 分为大根堆小根堆 2.LCA 首 ...

  10. docker 提高效率 network-bridging 桥接

    安装的时间顺序 bit3 192.168.107.128 wredis 192.168.107.129 wmysql 192.168.107.130 wslave 192.168.107.131 w ...