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. 前端自动构建工具Gulp入门

    基于nodeJs:通过不同插件能自动完成一系列动作,比如压缩js/css/img.解析模版标签.解析less等: 一.安装gulp 安装nodeJs 打开Node.js command prompt ...

  2. 基于Ip的刷投票排名及刷百度推广的自动化实现

    所有基于Ip的刷投票排名,只要不涉及用户登录情况,都可以在手机端自动化实现,因为电信运营商的ip地址段是无限的,理论上,飞行模式开关一次,所分配ip地址是变化的,这就有了大量的ip可用 在手机端写个a ...

  3. Spring配置文件引入xml文件: <import resource=" " />标签使用总结

    引入其他模块XML 在Spring的配置文件,有时候为了分模块的更加清晰的进行相关实体类的配置. 比如现在有一个job-timer.xml的配置 <?xml version="1.0& ...

  4. 任意的组合,数组或数组,数组或list,list或list不用循环得出匹配的总数和需要的字段列

    var res = list.Where(p=> list2.Any(x=>x.Id == p.Id));var count = res.Count();var ids = res.Sel ...

  5. Oracle XE快捷版(速成版)的限制

    1.CPU上限:无论把数据库安装在多少核的服务器上,都只会提供一个CPU核心的运算能力 2.安装和执行限制:只能安装一个实例且只能运行一个实例 3.用户数据上限:最大11G的用户数据 4.内存使用上限 ...

  6. c3p0 配置文件的设置。解决编码乱码问题等

    <?xml version="1.0" encoding="UTF-8"?> <c3p0-config> <named-confi ...

  7. class文件打包成jar

    电脑左下角“开始”——“运行”——输入cmd——cd+空格+clss文件所在文件夹的路径——jar+空格+-cf+空格+“jar包的名字”.jar+空格+*.class.好了...

  8. __int64 与long long 的区别

    //为了和DSP兼容,TSint64和TUint64设置成TSint40和TUint40一样的数 //结果VC中还是认为是32位的,显然不合适 //typedef signed long int    ...

  9. SpringBoot整合Netty

    总体来说只需要三个步骤,下面详细介绍 第一步 创建SpringBoot工程snetty 第二步 创建子模块也就是ModuleClient,Server,均为SpringBoot工程 第三步 将服务器端 ...

  10. LOJ1070(SummerTrainingDay05-B 矩阵快速幂)

    Algebraic Problem Given the value of a+b and ab you will have to find the value of an+bn. a and bnot ...