一、spark SQL:类似于Hive,是一种数据分析引擎

什么是spark SQL?

spark SQL只能处理结构化数据

底层依赖RDD,把sql语句转换成一个个RDD,运行在不同的worker上

特点:

1、容易集成:SQL语句

2、对不同的数据源提供统一的访问方式:DataFrame 用DataFrame屏蔽数据源的差别

3、兼容Hive

大纲:

核心概念:DataFrame(看作表):就是表,是Spark SQL对结构化数据的抽象集合

表现形式:RDD

表=表结构+数据

DataFrame=schema+RDD

DataSet(新API接口 看作表)

如何创建DataFrame?

1、方式一:通过case class创建DataFrame

创建表结构

case class EMP(empno:Int,ename:String,job:String,mgr:String,hiredata:String,sal:Int,comm:String,deptno:Int)

导入emp.csv文件并指定分隔符

val lines = sc.textFile("/root/temp/emp.csv").map(_.split(","))

lines.collect

将表结构和数据关联起来

val allEmp = lines.map(x=>Emp(x(0).toInt,x(1),x(2),x(3),x(4),x(5).toInt,x(6),x(7).toInt))

创建DataFrame:

val empDF = allEmp.toDF

操作DataFrame:

empDF.show:展示DataFrame

empDF.printSchema:打印DataFrame的表结构

2、方式二:通过SparkSession.createDataFrame()创建DataFrame

什么是spark session?

从spark2.0以后提供了统一访问spark各个模块的对象:spark session

创建表结构:用StructType类

import org.apache.spark.sql

import org.apache.spark.sql.types._

val myschema = StructType(List(empno:Int,ename:String,job:String,mgr:String,hiredata:String,sal:Int,comm:String,deptno:Int))

导入emp.csv文件并指定分隔符

val lines = sc.textFile("/root/temp/emp.csv").map(_.split(","))

将表结构和数据关联起来,把读入的数据emp.csv映射成一行,这里没有带表结构

import.org.apache.spark.sql._

val rowRDD = lines.map(x=>Row(x(0).toInt,x(1),x(2),x(3),x(4),x(5).toInt,x(6),x(7).toInt))

通过SparkSession.createDataFrame()创建表

val df = spark.createDataFrame(rowRDD,myschema)

3、方式三:直接读取一个具有格式的数据文件作为DataFrame(json文件)

val peopleDF = spark.read.json("/root/training/")

4、操作DataFrame:DSL语句和SQL语句

DSL语句:empDF.show

empDF.printSchema

查询所有员工的信息:df.show

查询所有员工的姓名:df.select("ename").show

或者df.select($"ename").show

查询员工信息:姓名 薪水 薪水+100

df.select($"ename",$"sal",$"sal"+100).show

查询工资大于2000的员工

df.filter("sal">2000).show

分组:

df.groupBy("deptno").count.show

SQL语句:需要将DataFrame注册成一张临时视图

df.createOrReplaceTempView("emp")

spark.sql("select * from emp").show

spark.sql("select * from emp where deptno=10").show

5、临时视图:2种

1、只在当前会话中有效:临时视图 df.createOrReplaceTempView("emp")

2、在全局范围内都有效:全局临时视图 df.createGlobalTempView("empG")

例:在当前会话中

spark.sql("select * from emp").show

spark.sql("select * from global_temp.empG").show

例:在新的会话中

spark.newSession.sal("select * from emp").show

spark.newSession.sal("select * from global_temp.empG").show

二、使用数据源:

1、load函数加载数据源和save函数保存数据源

load函数默认的数据源是parquet文件

json函数默认的数据源是json文件

val usersDF = spark.read.load("/root/training/spakr-2.1.0-bin-hadoop2.7/examples/")

usersDF.select("name","favorite_color").show

usersDF.select("name","favorite_color").write.save("/root/temp/result")

2、Parquet文件:是sparkSQL load函数默认加载的数据源,按列存储的文件

如何把其他文件格式转换成parquet文件?

例:json文件---->parquet文件

val empJSON = spark.read.json("/root/temp/emp.json") #直接读取一个具有格式的数据文件作为DataFrame

empJSON.write.parquet("/root/temp/empparquet") #/empparquet目录不能事先存在

或者empJSON.wirte.mode("overwrite").parquet("/root/temp/result") #/result目录可以事先存在

功能:支持Schema的合并

第一个文件:val df1 = sc.makeRDD(1 to 5).map(i=>(i,i*2)).toDF("single","double")

df1.write.parquet("/root/temp/test_table/key=1")

第二个文件:val df2 = sc.makeRD(6 to 10).map(i=>(i,i*3)).toDF("single","triple")

df2.write.parquet("/root/temp/test_table/key=2")

合并两个文件:val df3 = spark.read.option("mergeSchema","true").parquet("/root/temp/test_table")

3、json文件:

spark.read.json("/root/training/spark-2.1.0-bin-hadoop-2.7/examples/src/main/resources/people.json")

spark.read.format("json").load("/root/training/spark-2.1.0-bin-hadoop2.7/examples/src/main/resources/people.json")

4、RDBMS:需要把RDBMS的驱动加入到spark shell中

spark.read.format("jdbc").option("url","jdbc:oracle:thin:@192.168.182.11:1521/orcl.example.com").option("dbtable","scott.emp").option("user","scott").option("password","tiger").load

或使用Properties类

import java.util.Properties

val prop = new Properties()

prop.setProperty("user","scott")

prop.setProperty("password","tiger")

val oracleDF1 = spark.read.jdbc("jdbc:oracle:thin:@192.168.182.11:1521/orcl")

作者:李金泽AllenLi,清华大学硕士研究生,研究方向:大数据和人工智能

详细解读Spark的数据分析引擎:Spark SQL的更多相关文章

  1. Spark入门,概述,部署,以及学习(Spark是一种快速、通用、可扩展的大数据分析引擎)

    1:Spark的官方网址:http://spark.apache.org/ Spark生态系统已经发展成为一个包含多个子项目的集合,其中包含SparkSQL.Spark Streaming.Graph ...

  2. 详细解读大数据分析引擎Pig&PigLatin语句

    Pig 一.Pig的介绍: Pig由Yahoo开发,主要应用于数据分析,Twitter公司大量使用Pig处理海量数据,Pig之所以是数据分析引擎,是因为Pig相当于一个翻译器,将PigLatin语句翻 ...

  3. 大规模数据分析统一引擎Spark最新版本3.3.0入门实战

    @ 目录 概述 定义 Hadoop与Spark的关系与区别 特点与关键特性 组件 集群概述 集群术语 部署 概述 环境准备 Local模式 Standalone部署 Standalone模式 配置历史 ...

  4. Apache Spark大数据分析入门(一)

    摘要:Apache Spark的出现让普通人也具备了大数据及实时数据分析能力.鉴于此,本文通过动手实战操作演示带领大家快速地入门学习Spark.本文是Apache Spark入门系列教程(共四部分)的 ...

  5. 使用Spark加载数据到SQL Server列存储表

    原文地址https://devblogs.microsoft.com/azure-sql/partitioning-on-spark-fast-loading-clustered-columnstor ...

  6. Cassandra联手Spark 大数据分析将迎来哪些改变?

    2014Spark峰会在美国旧金山举行,与会数据库平台供应商DataStax宣布,与Spark供应商Databricks合作,在它的旗舰产 品 DataStax Enterprise 4.5 (DSE ...

  7. 大数据系列之并行计算引擎Spark介绍

    相关博文:大数据系列之并行计算引擎Spark部署及应用 Spark: Apache Spark 是专为大规模数据处理而设计的快速通用的计算引擎. Spark是UC Berkeley AMP lab ( ...

  8. 大数据学习:Spark是什么,如何用Spark进行数据分析

    给大家分享一下Spark是什么?如何用Spark进行数据分析,对大数据感兴趣的小伙伴就随着小编一起来了解一下吧.     大数据在线学习 什么是Apache Spark? Apache Spark是一 ...

  9. Python3实战Spark大数据分析及调度 (网盘分享)

    Python3实战Spark大数据分析及调度 搜索QQ号直接加群获取其它学习资料:715301384 部分课程截图: 链接:https://pan.baidu.com/s/12VDmdhN4hr7yp ...

随机推荐

  1. 【代码笔记】iOS-JSONKit的使用

    一,工程图. 二,代码. #import "RootViewController.h" //为JSONKit添加头文件 #import "JSONKit.h" ...

  2. 安卓基础之Activity的生命周期

    Activity的生命周期 onCreate 在Activity被创建时调用 onDesdroty 在Activity销毁时调用 onRestart 在Activity重新打开时调用 onStart ...

  3. Apache,PHP,MySQL独立安装

    最近在工作中常常接触到PHP,自己也写过一些简单的PHP页面.我们知道PHP是在服务器端运行的脚本语言,因此我们需要配置服务器环境.之前为了省事直接使用的是wamp集成环境,但是突然某一天领导要求我们 ...

  4. 数据库小组与UI小组第一次对接

    时间:2018.6.1,21:30 ~ 23:00 人员:除黄志鹏外全体成员,因为黄志鹏临时有事 工作内容: 主要为数据库小组与UI第二组对接,并将成果汇总到github仓库.另外UI第一组重构了代码 ...

  5. Prometheus Node_exporter 之 Network Traffic Detail

    Network Traffic Detail /proc/net/dev 1. Network Traffic by Packets type: GraphUnit: packets/secLabel ...

  6. python基础一数据类型之列表

    摘要: python基础一中写到列表,那么这篇主要讲列表. 1,定义列表 2,列表.元祖.字符串都属于序列,都可以用用索引和切片. 3,列表的方法 1,定义列表 list1 = ['a','b',1, ...

  7. 使用动态跟踪技术SystemTap监控MySQL、Oracle性能

    [IT168 技术]本文根据吕海波2018年5月11日在[第九届中国数据库技术大会]上的演讲内容整理而成. 讲师介绍: 吕海波,美创科技研究员,ITPUB管理版版主.出版技术书籍<Oracle内 ...

  8. 巧用foxmail同步qq邮箱的通讯录

    如果您企业使用的qq企业邮箱,那么你在web端登陆邮箱并填写收件人时,发现QQ邮箱是可以自动完成,并且中文名称自动完成. 如何在使用foxmail邮件客户端的情况下也同步这些邮箱信息呢?需要七步,看截 ...

  9. 【解决方案】chrome打开新标签页自动打开chrome://newtab并且跳转到谷歌香港

    简述天,昨天开始遇到这个问题,还没有留心,结果今天多次使用chrome的时候,就发现有些不对了..打开chrome的新标签页,结果出现了自动跳转的问题我自动跳转的是下面这个网页:https://www ...

  10. 写博的第一天 0x00

    作为一个大学生,我觉得自己除了睡觉,打游戏,吃饭更应该做点有意义的事情,作为计算机专业的学生,更应该勤奋点,主动去学习.已经要大三了,我认识到这个暑假我必须学点什么了,为了更好的学习,我决定学语言的同 ...