我的编程空间,编程开发者的网络收藏夹
学习永远不晚

怎么创建SparkSession和sparkSQL

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

怎么创建SparkSession和sparkSQL

这篇文章给大家分享的是有关怎么创建SparkSession和sparkSQL的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

一、概述

spark 有三大引擎,spark core、sparkSQL、sparkStreaming,

spark core 的关键抽象是 SparkContext、RDD;

SparkSQL 的关键抽象是 SparkSession、DataFrame;

sparkStreaming 的关键抽象是 StreamingContext、DStream

SparkSession 是 spark2.0 引入的概念,主要用在 sparkSQL 中,当然也可以用在其他场合,他可以代替 SparkContext;

SparkSession 其实是封装了 SQLContext 和 HiveContext

(1) 在Spark1.6 中我们使用的叫Hive on spark,主要是依赖hive生成spark程序,有两个核心组件SQLcontext和HiveContext。

这是Spark 1.x 版本的语法

//set up the spark configuration and create contexts val sparkConf = new SparkConf().setAppName("SparkSessionZipsExample").setMaster("local")  // your handle to SparkContext to access other context like SQLContext val sc = new SparkContext(sparkConf).set("spark.some.config.option", "some-value") val sqlContext = new org.apache.spark.sql.SQLContext(sc)

(2)Spark2.0中我们使用的就是sparkSQL,是后继的全新产品,解除了对Hive的依赖。

从Spark2.0以上的版本开始,spark是使用全新的SparkSession接口代替Spark1.6 中的SQLcontext和HiveContext 来实现对数据的加载、转换、处理等工作,并且实现了SQLcontext和HiveContext的所有功能。

在新版本中并不需要之前那么繁琐的创建很多对象,只需要创建一个SparkSession对象即可。SparkSession支持从不同的数据源加载数据,并把数据转换成DataFrame,并支持把DataFrame转换成SQLContext自身中的表。然后使用SQL语句来操作数据,也提供了HiveQL以及其他依赖于Hive的功能支持。

二、创建SparkSession

SparkSession 是 Spark SQL 的入口。使用 Dataset 或者 Dataframe 编写 Spark SQL 应用的时候,第一个要创建的对象就是 SparkSession。Builder 是 SparkSession 的构造器。 通过 Builder, 可以添加各种配置,并通过 stop 函数来停止 SparkSession。

Builder 的方法如下:

import org.apache.spark.sql.SparkSessionval spark: SparkSession = SparkSession.builder .appName("My Spark Application")  //设置 application 的名字 .master("local[*]")              .enableHiveSupport() //增加支持 hive Support       .config("spark.sql.warehouse.dir", "target/spark-warehouse") //设置各种配置 .getOrCreate     //获取或者新建一个 sparkSession

(1)设置参数

创建SparkSession之后可以通过 spark.conf.set 来设置运行参数

//配置设置 spark.conf.set("spark.sql.shuffle.partitions", 6) spark.conf.set("spark.executor.memory", "2g")  //获取配置,可以使用Scala的迭代器来读取configMap中的数据。  val configMap:Map[String, String] = spark.conf.getAll()

(2)读取元数据

如果需要读取元数据(catalog),可以通过SparkSession来获取。

spark.catalog.listTables.show(false) spark.catalog.listDatabases.show(false)

这里返回的都是Dataset,所以可以根据需要再使用Dataset API来读取

怎么创建SparkSession和sparkSQL

catalog 和 schema 是两个不同的概念
Catalog是目录的意思,从数据库方向说,相当于就是所有数据库的集合;
Schema是模式的意思, 从数据库方向说, 类似Catelog下的某一个数据库;

(3)创建Dataset和Dataframe

通过SparkSession来创建Dataset和Dataframe有多种方法。

通过range()方法来创建dataset
通过createDataFrame()来创建dataframe。
// create a Dataset using spark.range starting from 5 to 100,// with increments of 5val numDS = spark.range(5, 100, 5)//创建dataset // reverse the order and display first 5 itemsnumDS.orderBy(desc("id")).show(5) //compute descriptive stats and display themnumDs.describe().show() // create a DataFrame using spark.createDataFrame from a List or Seqval langPercentDF = spark.createDataFrame( List( ("Scala", 35),     ("Python", 30), ("R", 15), ("Java", 20)) )//创建dataframe //rename the columnsval lpDF = langPercentDF.withColumnRenamed("_1", "language").    withColumnRenamed("_2", "percent") //order the DataFrame in descending order of percentagelpDF.orderBy(desc("percent")).show(false)

怎么创建SparkSession和sparkSQL

(4)读取数据

可以用SparkSession读取JSON、CSV、TXT 和 parquet表。

import spark.implicits //使RDD转化为DataFrame以及后续SQL操作//读取JSON文件,生成DataFrameval jsonFile = args(0)val zipsDF = spark.read.json(jsonFile)

(5)使用SparkSQL

借助SparkSession用户可以像SQLContext一样使用Spark SQL的全部功能。

zipsDF.createOrReplaceTempView("zips_table")//对上面的dataframe创建一个表zipsDF.cache()//缓存表 val resultsDF = spark.sql("SELECT city, pop, state, zip FROM zips_table") //对表调用SQL语句resultsDF.show(10)//展示结果

(6)存储/读取Hive表

下面的代码演示了通过SparkSession来创建Hive表并进行查询的方法。

//drop the table if exists to get around existing table error spark.sql("DROP TABLE IF EXISTS zips_hive_table")  //save as a hive table spark.table("zips_table").write.saveAsTable("zips_hive_table")  //make a similar query against the hive table val resultsHiveDF = spark.sql("SELECT city, pop, state,         zip FROM zips_hive_table WHERE pop > 40000")  resultsHiveDF.show(10)

三、 SQLContext

它是 sparkSQL 的入口点,sparkSQL 的应用必须创建一个 SQLContext 或者 HiveContext 的类实例

from pyspark import SparkContext, SparkConffrom pyspark.sql import SparkSession, SQLContext, HiveContext conf = SparkConf().setAppName('test').setMaster('yarn')sc = SparkContext(conf=conf) sqlc = SQLContext(sc)print(dir(sqlc))# 'cacheTable', 'clearCache', 'createDataFrame', 'createExternalTable', 'dropTempTable', 'getConf', 'getOrCreate', 'newSession', 'range', 'read', 'readStream',# 'registerDataFrameAsTable', 'registerFunction', 'registerJavaFunction', 'setConf', 'sparkSession', 'sql', 'streams', 'table', 'tableNames', 'tables', 'udf', 'uncacheTable' ### sqlcontext 读取数据也自动生成 dfdata = sqlc.read.text('/usr/yanshw/test.txt')print(type(data))

四、 HiveContext

它是 sparkSQL 的另一个入口点,它继承自 SQLContext,用于处理 hive 中的数据

HiveContext 对 SQLContext 进行了扩展,功能要强大的多

它可以执行 HiveSQL 和 SQL 查询

它可以操作 hive 数据,并且可以访问 HiveUDF

它不一定需要 hive,在没有 hive 环境时也可以使用 HiveContext

注意,如果要处理 hive 数据,需要把 hive 的 hive-site.xml 文件放到 spark/conf 下,HiveContext 将从 hive-site.xml 中获取 hive 配置信息;

如果 HiveContext 没有找到 hive-site.xml,他会在当前目录下创建 spark-warehouse 和 metastore_db 两个文件夹

from pyspark import SparkContext, SparkConffrom pyspark.sql import SparkSession, SQLContext, HiveContext conf = SparkConf().setAppName('test').setMaster('yarn')sc = SparkContext(conf=conf)## 需要把 hive/conf/hive-site.xml 复制到 spark/conf 下hivec = HiveContext(sc)print(dir(hivec))# 'cacheTable', 'clearCache', 'createDataFrame', 'createExternalTable', 'dropTempTable', 'getConf', 'getOrCreate', 'newSession', 'range', 'read', 'readStream','refreshTable',# 'registerDataFrameAsTable', 'registerFunction', 'registerJavaFunction', 'setConf', 'sparkSession', 'sql', 'streams', 'table', 'tableNames', 'tables', 'udf', 'uncacheTable' data = hivec.sql('''select * from hive1101.person limit 2''')print(type(data))

SparkSession 创建

from pyspark.sql import SparkSession  ### method 1sess = SparkSession.builder \    .appName("aaa") \    .config("spark.driver.extraClassPath", sparkClassPath) \    .master("local") \    .enableHiveSupport() \  # sparkSQL 连接 hive 时需要这句    .getOrCreate()      # builder 方式必须有这句 ### method 2conf = SparkConf().setAppName('myapp1').setMaster('local[4]')   # 设定 appname 和 mastersess = SparkSession.builder.config(conf=conf).getOrCreate() # builder 方式必须有这句 ### method 3from pyspark import SparkContext, SparkConfconf = SparkConf().setAppName('myapp1').setMaster('local[4]')   # 设定 appname 和 mastersc = SparkContext(conf=conf)sess = SparkSession(sc)

1)文件数据源

from pyspark import SparkContext, SparkConffrom pyspark.sql import SparkSession, SQLContext, HiveContext conf = SparkConf().setAppName('test').setMaster('yarn')sc = SparkContext(conf=conf) #### 替代了 SQLContext 和 HiveContext,其实只是简单的封装,提供了统一的接口spark = SparkSession(sc)print(dir(spark))# 很多属性,我把私有属性删了# 'Builder','builder', 'catalog', 'conf', 'createDataFrame', 'newSession', 'range', 'read', 'readStream','sparkContext', 'sql', 'stop', 'streams', 'table', 'udf', 'version' ### sess 读取数据自动生成 dfdata = spark.read.text('/usr/yanshw/test.txt')      #read 可读类型 [ 'csv', 'format', 'jdbc', 'json', 'load', 'option', 'options', 'orc', 'parquet', 'schema', 'table', 'text']print(type(data))       # <class 'pyspark.sql.dataframe.DataFrame'>

2) Hive 数据源

## 也需要把 hive/conf/hive-site.xml 复制到 spark/conf 下spark = SparkSession.builder.appName('test').master('yarn').enableHiveSupport().getOrCreate() hive_data = spark.sql('select * from hive1101.person limit 2')print(hive_data)        # DataFrame[name: string, idcard: string]

SparkSession vs SparkContext

SparkSession 是 spark2.x 引入的新概念,SparkSession 为用户提供统一的切入点,字面理解是创建会话,或者连接 spark

在 spark1.x 中,SparkContext 是 spark 的主要切入点,由于 RDD 作为主要的 API,我们通过 SparkContext 来创建和操作 RDD,

SparkContext 的问题在于:

不同的应用中,需要使用不同的 context,在 Streaming 中需要使用 StreamingContext,在 sql 中需要使用 sqlContext,在 hive 中需要使用 hiveContext,比较麻烦

随着 DataSet 和 DataFrame API 逐渐成为标准 API,需要为他们创建接入点,即 SparkSession

SparkSession 实际上封装了 SparkContext,另外也封装了 SparkConf、sqlContext,随着版本增加,可能更多,

所以我们尽量使用 SparkSession ,如果发现有些 API 不在 SparkSession 中,也可以通过 SparkSession 拿到 SparkContext 和其他 Context 等

在 shell 操作中,原生创建了 SparkSession,故无需再创建,创建了也不会起作用

在 shell 中,SparkContext 叫 sc,SparkSession 叫 spark。

感谢各位的阅读!关于“怎么创建SparkSession和sparkSQL”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

怎么创建SparkSession和sparkSQL

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

怎么创建SparkSession和sparkSQL

这篇文章给大家分享的是有关怎么创建SparkSession和sparkSQL的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。一、概述spark 有三大引擎,spark core、sparkSQL、sparkStre
2023-06-20

hadoop hdfs和MapReduce怎么创建

本篇内容主要讲解“hadoop hdfs和MapReduce怎么创建”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“hadoop hdfs和MapReduce怎么创建”吧!大致步骤如下:新建一个文
2023-06-02

java ThreadLocal怎么创建和访问

今天小编给大家分享一下java ThreadLocal怎么创建和访问的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。1、创建,
2023-06-30

linux怎么创建用户和组

本篇内容主要讲解“linux怎么创建用户和组”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“linux怎么创建用户和组”吧!linux下有三类用户: 1、超级用户 :root 具有操作系通的一切
2023-06-13

rust的vector和hashmap怎么创建

今天小编给大家分享一下rust的vector和hashmap怎么创建的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。动态数组V
2023-07-05

MySQL索引怎么创建和删除

这篇文章主要介绍了MySQL索引怎么创建和删除的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇MySQL索引怎么创建和删除文章都会有所收获,下面我们一起来看看吧。MySQL Index索引是一种数据结构,可以是B
2023-07-05

Java怎么创建和销毁对象

这篇文章主要介绍了Java怎么创建和销毁对象的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Java怎么创建和销毁对象文章都会有所收获,下面我们一起来看看吧。一、介绍Java由Sun Microsystems发明
2023-07-04

使用Flow和IPFS怎么创建NFT

今天就跟大家聊聊有关使用Flow和IPFS怎么创建NFT,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。苹果系统:brew install flow-cliLinux:sh -ci “
2023-06-15

oracle序列怎么创建和使用

在Oracle数据库中,序列(Sequence)是一种生成唯一数字的对象,可以用于自动生成主键值或其他需要唯一数字的场景。以下是创建和使用Oracle序列的步骤:1. 创建序列:```CREATE SEQUENCE sequence_nam
2023-09-23

mysql索引怎么创建和使用

MySQL索引是用于加快查询速度的一种数据结构,可以提高查询效率。下面是创建和使用MySQL索引的步骤:1. 创建索引: - 使用CREATE INDEX语句创建索引。语法如下: ```sql CREATE INDEX ind
mysql索引怎么创建和使用
2024-02-29

怎么创建和连接数据库

这篇文章主要介绍“怎么创建和连接数据库”,在日常操作中,相信很多人在怎么创建和连接数据库问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么创建和连接数据库”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!创建
2023-06-08

C++线程怎么创建和管理

C++中创建和管理线程的主要方式是使用std::thread类。以下是创建和管理线程的基本步骤:包含头文件:首先需要包含头文件。创建线程:使用std::thread类的构造函数创建线程。构造函数接受一个可调用的对象作为参数,可以是函数、函数
2023-10-26

java怎么创建和使用组件

在Java中,可以使用Swing或JavaFX来创建和使用组件。下面是一些常见的创建和使用组件的方法:1. 创建组件:- 使用Swing:```javaimport javax.swing.*;// 创建一个按钮JButton button
2023-10-10

Linux进程怎么创建和启动

本篇内容主要讲解“Linux进程怎么创建和启动”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Linux进程怎么创建和启动”吧!进程的类型在 Linux 中主要有两种类型的进程:前台进程(也称为交
2023-06-27

anaconda怎么创建和删除环境

这篇文章主要介绍了anaconda怎么创建和删除环境的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇anaconda怎么创建和删除环境文章都会有所收获,下面我们一起来看看吧。一、创建环境在菜单栏中打开Anacon
2023-07-06

Oracle中怎么创建用户和表

这篇文章主要讲解了“Oracle中怎么创建用户和表”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Oracle中怎么创建用户和表”吧!Oracle创建用户、表(1)1. 连接C:\Users\
2023-07-05

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录