一、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. IDEA unable to find valid certification path to requested target

    一.报错 Could not transfer artifact org.apache.maven.plugins:maven-install-plugin:pom:2.4 from/to alima ...

  2. PHP入门培训教程 PHP变量的使用

      很多朋友在编写PHP程序的时候有时候对变量总有着不能确定的问题,而且也有很多问题就是因为变量的处理不当所造成的.这里兄弟连PHP培训 小编,就PHP变量系统说一下. PHP的变量分为全局变量与局部 ...

  3. 死锁(deadlocks)

    1.定义 所谓死锁<DeadLock>: 是指两个或两个以上的进程在执行过程中,因争夺资源而造成的一种互相等待的现象.若无外力作用,它们都将无法推进下去,此时称系统处于死锁状态或系统产生了 ...

  4. Leetcode 16. 3Sum Closest(指针搜索)

    16. 3Sum Closest Medium 131696FavoriteShare Given an array nums of n integers and an integer target, ...

  5. 微信小程序自定义底部导航栏组件+跳转

    微信小程序本来封装有底部导航栏,但对于想自定义样式和方法的开发者来说,这并不是很好. 参考链接:https://github.com/ljybill/miniprogram-utils/tree/ma ...

  6. 170814-17关于javaweb的知识点

    1.   静态web项目.动态web项目区别                                         WEB-INF                               ...

  7. jquery 获取 input type radio checked的元素

    .find('input:radio:checked'):.find("input[type='radio']:checked");.find("input[name=' ...

  8. 织梦自定义表单导出为excel功能

    1.首先在后台修改/dede/templets/diy_main.htm <a href="../plus/diy.php?action=daochu&diyid={dede: ...

  9. python 多进程读写文件

    import time from multiprocessing import Process, JoinableQueue, cpu_count import csv ####处理一条数据的方法 d ...

  10. python监控ip攻击,服务器防火墙

    '''写一个程序,监控nginx的日志,如果有人攻击就加入黑名单 把ip加入黑名单的策略是,1分钟之内,如果同一个ip请求超过200次,那就加入黑名单''' '''分析:1.打开文件 2.循环读取 3 ...