0. 说明

  DataSet 介绍 && Spark SQL 访问 JSON 文件 && Spark SQL 访问 Parquet 文件 && Spark SQL 访问 JDBC 数据库 && Spark SQL 作为分布式查询引擎


1. DataSet 介绍

  强类型集合,可以转换成并行计算。

  Dataset 上可以执行的操作分为 Transfermation 和 Action ,类似于 RDD。

  Transfermation 生成新的 DataSet,Action 执行计算并返回结果。

  DataSet 是延迟计算,只有当调用 Action 时才会触发执行。内部表现为逻辑计划。

  Action 调用时,Spark 的查询优化器对逻辑计划进行优化,生成物理计划,用于分布式行为下高效的执行。

  具体的执行计划可以通过 explain函数 来查看,方式如下:

scala> spark.sql("explain select name,class,score from tb_student").show(,false)

  结果如图所示,show(1000 , false) 表示显式 1000行数据,结果不截断显式。

  


2. Spark SQL 访问 JSON 文件

  【保存 JSON 文件】

# 创建 DataFrame
scala> val df = spark.sql("select * from orders") # 输出 JSON 文件
scala> df.write.json("file:///home/centos/json")

  

  【读取 JSON 文件】

scala> val df = spark.read.json("file:///home/centos/json")

scala> df.show

  


3. Spark SQL 访问 Parquet 文件

  【保存】

# 创建 DataFrame
scala> val df = spark.sql("select * from orders") # 保存成 parquet 文件
scala> df.write.parquet("file:///home/centos/par")

  【读取】

# 创建 DataFrame
scala> val df = spark.read.parquet("file:///home/centos/par") # 读取 Parquet 文件
scala> df.show

  


4. Spark SQL 访问 JDBC 数据库

  【4.1 处理第三方 jar】

  spark SQL 是分布式数据库访问,需要将驱动程序分发到所有 worker 节点或者通过 --jars 命令指定附件

  分发 jar 到所有节点 ,third.jar 为第三方 jar 包

xsync /soft/spark/jars/third.jar

  通过--jars 命令指定

spark-shell --master spark://s101:7077 --jars /soft/spark/jars/third.jar

  【4.2 读取 MySQL 数据】

val prop = new java.util.Properties()
prop.put("driver" , "com.mysql.jdbc.Driver")
prop.put("user" , "root")
prop.put("password" , "root")
# 读取
val df = spark.read.jdbc("jdbc:mysql://192.168.23.101:3306/big12" , "music" ,prop) ;
# 显示
df.show

  【4.3 保存数据到 MySQL 表(表不能存在)】

val prop = new java.util.Properties()
prop.put("driver" , "com.mysql.jdbc.Driver")
prop.put("user" , "root")
prop.put("password" , "root")
# 保存
dataframe.write.jdbc("jdbc:mysql://192.168.231.1:3306/mydb" , "emp" ,prop ) ;

5. Spark SQL 作为分布式查询引擎

  【5.1 说明】
  终端用户或应用程序可以直接同 Spark SQL 交互,而不需要写其他代码。

  

  【5.2 启动 Spark的 thrift-server 进程】

  在 spark/sbin 目录下执行以下操作

[centos@s101 /soft/spark/sbin]$ start-thriftserver.sh --master spark://s101:7077

  【5.3 验证】

  查看 Spark WebUI,访问 http://s101:8080

  端口检查,检查10000端口是否启动

netstat -anop | grep 

  【5.4 使用 Spark 的 beeline 程序测试】

  在 spark/bin 目录下执行以下操作

# 进入 Spark 的 beeline
[centos@s101 /soft/spark/bin]$ ./beeline # 连接 Hive
!connect jdbc:hive2://localhost:10000/big12;auth=noSasl # 查看表
: jdbc:hive2://localhost:10000/big12> show tables;

  【5.5 编写客户端 Java 程序与 Spark 分布式查询引擎交互】

    [添加依赖]

        <dependency>
<groupId>org.apache.hive</groupId>
<artifactId>hive-exec</artifactId>
<version>2.1.0</version>
</dependency>
<dependency>
<groupId>org.apache.hive</groupId>
<artifactId>hive-jdbc</artifactId>
<version>2.1.0</version>
</dependency>

    [代码编写]

package com.share.sparksql;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet; /**
* 使用 Spark SQL 分布式查询引擎
*/
public class ThriftServerDemo {
public static void main(String[] args) {
try {
Class.forName("org.apache.hive.jdbc.HiveDriver");
Connection connection = DriverManager.getConnection("jdbc:hive2://s101:10000/big12;auth=noSasl");
ResultSet rs = connection.createStatement().executeQuery("select * from orders");
while (rs.next()) {
System.out.printf("%d / %s\r\n", rs.getInt(1), rs.getString(2));
}
rs.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}

    [特别说明]

    以上黄色部分为 HiveServer2 的验证模式,如果未添加以上黄色部分则会报错,报错如下:

  


[Spark SQL_3] Spark SQL 高级操作的更多相关文章

  1. 大数据学习day25------spark08-----1. 读取数据库的形式创建DataFrame 2. Parquet格式的数据源 3. Orc格式的数据源 4.spark_sql整合hive 5.在IDEA中编写spark程序(用来操作hive) 6. SQL风格和DSL风格以及RDD的形式计算连续登陆三天的用户

    1. 读取数据库的形式创建DataFrame DataFrameFromJDBC object DataFrameFromJDBC { def main(args: Array[String]): U ...

  2. 【转】【技术博客】Spark性能优化指南——高级篇

    http://mp.weixin.qq.com/s?__biz=MjM5NjQ5MTI5OA==&mid=2651745207&idx=1&sn=3d70d59cede236e ...

  3. Spark性能优化指南——高级篇

    本文转载自:https://tech.meituan.com/spark-tuning-pro.html 美团技术点评团队) Spark性能优化指南——高级篇 李雪蕤 ·2016-05-12 14:4 ...

  4. 大数据技术之_27_电商平台数据分析项目_02_预备知识 + Scala + Spark Core + Spark SQL + Spark Streaming + Java 对象池

    第0章 预备知识0.1 Scala0.1.1 Scala 操作符0.1.2 拉链操作0.2 Spark Core0.2.1 Spark RDD 持久化0.2.2 Spark 共享变量0.3 Spark ...

  5. 小记---------spark组件与其他组件的比较 spark/mapreduce ;spark sql/hive ; spark streaming/storm

    Spark与Hadoop的对比   Scala是Spark的主要编程语言,但Spark还支持Java.Python.R作为编程语言 Hadoop的编程语言是Java    

  6. [Spark] 05 - Spark SQL

    关于Spark SQL,首先会想到一个问题:Apache Hive vs Apache Spark SQL – 13 Amazing Differences Hive has been known t ...

  7. Hive on Spark和Spark sql on Hive,你能分的清楚么

    摘要:结构上Hive On Spark和SparkSQL都是一个翻译层,把一个SQL翻译成分布式可执行的Spark程序. 本文分享自华为云社区<Hive on Spark和Spark sql o ...

  8. Spark 键值对RDD操作

    键值对的RDD操作与基本RDD操作一样,只是操作的元素由基本类型改为二元组. 概述 键值对RDD是Spark操作中最常用的RDD,它是很多程序的构成要素,因为他们提供了并行操作各个键或跨界点重新进行数 ...

  9. spark中RDD的转化操作和行动操作

    本文主要是讲解spark里RDD的基础操作.RDD是spark特有的数据模型,谈到RDD就会提到什么弹性分布式数据集,什么有向无环图,本文暂时不去展开这些高深概念,在阅读本文时候,大家可以就把RDD当 ...

随机推荐

  1. Spring总结 4.AOP之为对象添加新功能

    Spring除了提供增强原有功能的方法外,还提供了为一个对象引入新功能的方法.如下: package cn.powerfully.service; public interface IService ...

  2. async & await 异步编程小示例,一看就懂

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  3. Unity生成WebService代理类

    普通的.net程序中,如果我们想引用webService,只需在项目中右键选择添加服务引用,然后在地址栏中输入Webservice地址,单击“转到”按钮,找到服务后再单击确定,Visual Studi ...

  4. SpringMVC Controller介绍及常见注解

    一.简介 在SpringMVC中,控制器Controller负责处理由DispatcherServlet分发的请求,它把用户请求的数据经过业务处理层处理之后封装成一个Model,然后再把该Model返 ...

  5. sip (gb28181)信令交互-视频点播与回播

    客户端发起的实时点播消息示范:(请求视频信令与断开视频信息 和 回播基本无差别) .请求视频流 INVITE sip:@ SIP/2.0 Via: SIP/;rport;branch=z9hG4bK2 ...

  6. 对于dll(动态链接库)的理解

    之前,尝试过写过dll,但是对于dll的理解还是不够深刻吧.今天,又加深了对于dll的理解程度,故记下以免以后忘记. 无论是c还是c++,我们通常先将源文件编译成中间代码,在Windows下是&quo ...

  7. .39-浅析webpack源码之parser.parse

    因为换了个工作,所以博客停了一段时间. 这是上个月留下来的坑,webpack的源码已经不太想看了,又臭又长,恶心的要死,想去看node的源码……总之先补完这个 上一节完成了babel-loader对J ...

  8. karma + jasmine 构建前端自动化测试

    http://blog.fens.me/nodejs-karma-jasmine/   很全的文档 执行karma init时报错如下: $ karma init > readline.js:5 ...

  9. C++标准模板库STL

    STL(Standard Template Library,标准模板库)是惠普实验室开发的一系列软件的统称.现然主要出现在C++中,但在被引入C++之前该技术就已经存在了很长的一段时间. STL的代码 ...

  10. [PHP] 看博客学习观察者模式

    具体应用场景是,当subject的某个动作需要引发一系列不同对象的动作(比如你是一个班长要去通知班里的某些人),与其一个一个的手动调用触发的方法(私下里一个一个通知),不如维护一个列表(建一个群),这 ...