大数据之SparkSQL简介及DataFrame的使用

  • 目录
  • 前言:
  • 1、Spark SQL
    • 1.1、Spark SQL概述
    • 1.2、DataFrames
    • 1.3、DataFrame常用操作
  • 总结:

目录

前言:

本文主要介绍下SparkSQL以及SparkSQL的简单使用。这里只是做了一个非常简单的介绍,后续工作中如果有用到相关的知识,我会再总结。

1、Spark SQL

1.1、Spark SQL概述

1.1.1、什么是Spark SQL
Spark SQL是Spark用来处理结构化数据的一个模块,它提供了一个编程抽象叫做DataFrame并且作为分布式SQL查询引擎的作用。
这里写图片描述

1.1.2、为什么要学习Spark SQL
我们已经学习了Hive,它是将Hive SQL转换成MapReduce然后提交到集群上执行,大大简化了编写MapReduce的程序的复杂性,由于MapReduce这种计算模型执行效率比较慢。所有Spark SQL的应运而生,它是将Spark SQL转换成RDD,然后提交到集群执行,执行效率非常快!
1.易整合
这里写图片描述
2.统一的数据访问方式
这里写图片描述
3.兼容Hive
这里写图片描述
4.标准的数据连接
这里写图片描述

1.2、DataFrames

1.2.1、什么是DataFrames
与RDD类似,DataFrame也是一个分布式数据容器。然而DataFrame更像传统数据库的二维表格,除了数据以外,还记录数据的结构信息即schema。同时,与Hive类似,DataFrame也支持嵌套数据类型(struct、array和map)。从API易用性的角度上 看,DataFrame API提供的是一套高层的关系操作,比函数式的RDD API要更加友好,门槛更低。由于与R和Pandas的DataFrame类似,Spark DataFrame很好地继承了传统单机数据分析的开发体验。
这里写图片描述
1.2.2、创建DataFrames
在Spark SQL中SQLContext是创建DataFrames和执行SQL的入口,在spark-1.5.2中已经内置了一个sqlContext。

1.在本地创建一个文件,有三列,分别是id、name、age,用空格分隔,然后上传到hdfs上

hdfs dfs -put person.txt /

2.在spark shell执行下面命令,读取数据,将每一行的数据使用列分隔符分割

val lineRDD=sc.textFile("hdfs://node1.itcast.cn:9000/person.txt").map(_.split(" "))

3.定义case class(相当于表的schema)

case class Person(id:Int, name:String, age:Int)

4.将RDD和case class关联

val personRDD = lineRDD.map(x => Person(x(0).toInt, x(1), x(2).toInt))

5.将RDD转换成DataFrame

val personDF = personRDD.toDF

6.对DataFrame进行处理

personDF.show

这里写图片描述

1.3、DataFrame常用操作

1.3.1、DSL风格语法

//查看DataFrame中的内容
personDF.show//查看DataFrame部分列中的内容
personDF.select(personDF.col("name")).show
personDF.select(col("name"), col("age")).show
personDF.select("name").show//打印DataFrame的Schema信息
personDF.printSchema
//查询所有的name和age,并将age+1
personDF.select(col("id"), col("name"), col("age") + 1).show
personDF.select(personDF("id"), personDF("name"), personDF("age") + 1).show

这里写图片描述

//过滤age大于等于18的
personDF.filter(col("age") >= 18).show

这里写图片描述

//按年龄进行分组并统计相同年龄的人数
personDF.groupBy("age").count().show()

这里写图片描述

1.3.2、SQL风格语法
如果想使用SQL风格的语法,需要将DataFrame注册成表

personDF.registerTempTable("t_person")
//查询年龄最大的前两名
sqlContext.sql("select * from t_person order by age desc limit 2").show

这里写图片描述

//显示表的Schema信息
sqlContext.sql("desc t_person").show

这里写图片描述

总结:

对于SparkSQL来说,目前博主也只是做了一个简单的了解。希望各位通过该文章能学到以下几点:
1、知道SparkSQL内部是将对应的SQL转换为RDD来处理的。
2、知道SparkSQL是什么以及有什么优缺点。
3、最重要的一点是知道SparkSQL一些常用的操作。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/456600.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python的各种推导式(列表推导式、字典推导式、集合推导式)

python的各种推导式(列表推导式、字典推导式、集合推导式) 推导式comprehensions(又称解析式),是Python的一种独有特性。推导式是可以从一个数据序列构建另一个新的数据序列的结构体。 共有三种推导,在Pyt…

原生js实现jquery库中选择器的功能(jquery库封装一)

今天是2017.1.1,新的一天,新的一年,新的一年里继续夯实基础知识,在工作中多些项目,多思考,多总结,前端是不断更新,在更新的过程中也是发现乐趣和挑战自我的过程,希望年轻…

Ubantu下使用vi时,方向键变字母输出、退格键无法删除字符的解决办法

目录前言:一、编辑/etc/vim/vimrc.tiny二、安装vim full版本三、添加”.vimrc”文件 目录 前言: 最近由于要玩TensorFlow,所以把尘封已久的Ubantu给打开了,不过配置网络的时候,算是一团糟,出现了在插入模…

《Python爬虫开发与项目实战》——第3章 初识网络爬虫 3.1 网络爬虫概述

本节书摘来自华章计算机《Python爬虫开发与项目实战》一书中的第3章,第3.1节,作者:范传辉著,更多章节内容可以访问云栖社区“华章计算机”公众号查看 第3章 初识网络爬虫 从本章开始,将正式涉及Python爬虫的开发。本章…

【python】解决:TypeError: can't send non-None value to a just-started generator

在一个生成器函数未启动之前,是不能传递数值进去。必须先传递一个None进去或者调用一次next(g)方法,才能进行传值操作 def product(c):# c.send(None)for i in range(5):print("生产者产生数据%d"%i)r c.send(str(i))print("消费者消费了…

Shell脚本与vi编辑器:vi启动与退出、工作模式、命令大全

Vi简介 Vi是一种广泛存在于各种UNIX和Linux系统中的文本编辑程序。Vi不是排版程序,只是一个纯粹的文本编辑程序。Vi是全屏幕文本编辑器,它没有菜单,只有命令。Vi不是基于窗口的,所以,这个多用途编辑程序可以用于在任何…

windows环境下,如何在Pycharm下安装TensorFlow环境

文章目录目录前言:1.安装Anaconda2.安装Tensorflow3.其他问题4.在pycharm中使用tensorflow目录 前言: 最近由于工作需要要使用TensorFlow,所以只能狂补相关的知识。本来博主打算在Ubantu上玩,但是由于一些原因还是放弃了这个想法…

python面向对象实现简易银行管理员页面系统【导入自定义模块】

main.py 人 类名:Person 属性:姓名 身份证号 电话 卡 行为:卡 类名:Card 属性:卡号 密码 余额 行为:银行 类名:Bank 属性:用户列表 提款机提款机 类名:ATM 属性&#xf…

[转] dpkg-deb命令

点击此处阅读原文 软件包管理 dpkg-deb命令是Debian Linux下的软件包管理工具,它可以对软件包执行打包和解包操作以及提供软件包信息。 语法dpkg-deb(选项)(参数) 选项-c:显示软件包中的文件列表; -e:将主控信息解压;…

《Effective Debugging:软件和系统调试的66个有效方法》一第5条:在能够正常运作的系统与发生故障的系统之间寻找差别...

本节书摘来自华章出版社《Effective Debugging:软件和系统调试的66个有效方法》一书中的第1章,第1.5节,作[希]迪欧米迪斯斯宾奈里斯(Diomidis Spinellis),更多章节内容可以访问云栖社…

如何安装多个Python版本以及在Pycharm中切换Python版本

目录前言: 首先要切换不同的版本,你必须先下载不同的Python版本,整个步骤如下所示:1、下载Python2.7x和Python3.5x版本2、安装Python2.7x和Python3.5x版本3、配置环境变量,分别添加如下至path路径4、只修改Python27&am…

【python】逻辑运算符总结

# 逻辑运算符 &#xff1a;构造复杂条件 # 优先级 not > and > or # 逻辑与 and 并且、同时 import random# a random.randint(1,5) # if a > 1 and a < 3_流程控制: # print("true") # else: # print("false") # 可以转换为假&#…

C#中out和ref之间的区别【转】

首先&#xff1a;两者都是按地址传递的&#xff0c;使用后都将改变原来参数的数值。 其次&#xff1a;ref可以把参数的数值传递进函数&#xff0c;但是out是要把参数清空&#xff0c;就是说你无法把一个数值从out传递进去的&#xff0c;out进去后&#xff0c;参数的数值为空&am…

如何打开.ipynb文件

最近碰到文件名后缀为.ipynb文件&#xff0c;起初没太在意这种文件格式&#xff0c;用Notepad打开之后看到也是类似于JSON格式的信息&#xff0c;以为也是为其他的一些文件服务的&#xff08;类似于配置一些HTML文件的配置文件&#xff09;。但是后来才发现这也是一种文本表示形…

《CCNP TSHOOT 300-135认证考试指南》——2.9节凭记忆完成表格和列表

本节书摘来自异步社区《CCNP TSHOOT 300-135认证考试指南》一书中的第2章&#xff0c;第2.9节凭记忆完成表格和列表&#xff0c;作者 【加】Raymond Lacoste , 【美】Kevin Wallace&#xff0c;更多章节内容可以访问云栖社区“异步社区”公众号查看 2.9 凭记忆完成表格和列表CC…

将f2fs文件系统到磁盘

1 用git下载f2fs文件系统tools的源代码。下载地址如下&#xff1a;http://git.kernel.org/cgit/linux/kernel/git/jaegeuk/f2fs-tools.git 具体的操作如下&#xff1a;git clone git://git.kernel.org/pub/scm/linux/kernel/git/jaegeuk/f2fs-tools.git 通过以…

【python】list append()和extend()区别

list append() ---》添加一个对象整体 extend() ----》添加迭代的对象 append() 添加单一元素在末尾 my_list [geeks, for] my_list.append(geeks) print(my_list) output: [geeks, for, geeks]添加一个list后&#xff0c;也是只添加一个list对象 my_list [geeks, for…

玩Python遇到的问题一二三及解决办法

文章目录问题一&#xff1a;python 2.7版本解决TypeError: encoding is an invalid keyword argument for this function。问题二&#xff1a;python读取文件时提示"UnicodeDecodeError: gbk codec cant decode byte 0x80 in position 205: illegal multibyte sequence&qu…

《MATLAB图像处理超级学习手册》导读

前言 MATLAB图像处理超级学习手册图像是人类获取信息的重要来源。当今的信息化社会&#xff0c;对图像处理和图像分析的要求越来越高&#xff0c;现有的图像软件由于采购成本和功能的限制&#xff0c;已经不能完全满足专业人士的需要&#xff0c;这时就需要专业人士来编写自己的…

【python】SOCK_STREAM和SOCK_DGRAM两种类型的区别【转】

sock_stream 是有保障的(即能保证数据正确传送到对方)面向连接的SOCKET&#xff0c;多用于资料(如文件)传送。 sock_dgram 是无保障的面向消息的socket &#xff0c; 主要用于在网络上发广播信息。 SOCK_STREAM是基于TCP的&#xff0c;数据传输比较有保障。SOCK_DGRAM是基于U…