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. 管理git生成的多个ssh key

    http://www.bootcss.com/p/git-guide/ 问题阐述 当有多个git账号的时候,比如一个github,用于自己进行一些开发活动,再来一个gitlab,一般是公司内部的git ...

  2. 疯狂Java讲义PDF

    java学习资料,仅供学习交流,自行取用↓ 链接:https://pan.baidu.com/s/1dF1wCST 密码:i75g

  3. es6学习笔记9--函数的扩展

    函数参数的默认值 基本用法 在ES6之前,不能直接为函数的参数指定默认值,为了避免这个问题,通常需要先判断一下参数y是否被赋值,如果没有,再等于默认值. ES6允许为函数的参数设置默认值,即直接写在参 ...

  4. 【SpringBoot系列2】SpringBoot整合Redis

    前言: 真的越来越喜欢SpringBoot了,这是SpringBoot学习系列之一. 正文: 1:首先在pom文件中添加依赖,记得是spring-boot-starter-data-redis,不是s ...

  5. CSRF重放共计详解

    CSRF 背景与介绍 CSRF(Cross Site Request Forgery, 跨站域请求伪造)是一种网络的攻击方式,它在 2007 年曾被列为互联网 20 大安全隐患之一.其他安全隐患,比如 ...

  6. [转]DevOps解决方案-腾讯云

    本文转自:https://cloud.tencent.com/solution/devops 什么是 DevOps?   DevOps 集文化理念.实践和工具于一身,可以提高企业高速交付应用程序和服务 ...

  7. Entity framework 6.0 简明教程 ef6

    http://www.entityframeworktutorial.net/code-first/entity-framework-code-first.aspx Ef好的教程 Entity Fra ...

  8. MFC框架之线程局部存储

    线程局部存储中用到的API基础:(TLS:Thread Local Storage) 1.在主线程中申请索引 g_index=::TlsAlloc(); 2.在线程函数中使用索引 存值:::TlsSe ...

  9. MFC获取系统信息

    一.获取系统时间 CString str,str2; CTime time; time = CTime::GetCurrentTime(); str = time.Format("%Y年%m ...

  10. sqlserver C# 数据类型对照表(转载)

    数据库中字段类型对应C#中的数据类型: 数据库                 C#程序 int int32 text string bigint int64  或 longbinary System ...