Spark SQL简介及视频教程,知识点总结+面试题解析

①数据按列存储,即每一列单独存放。

②数据即索引。

③只访问查询涉及的列,可以大量降低系统I/O。

④每一列由一个线程来处理,即查询的并发处理性能高。

⑤数据类型一致,数据特征相似,可以高效压缩。比如有增量压缩、前缀压缩算法都是基于列存储的类型定制的,所以可以大幅度提高压缩比,有利于存储和网络输出数据带宽的消耗。

三、SparkSQL入门

================

SparkSql将RDD封装成一个DataFrame对象,这个对象类似于关系型数据库中的表。

1、创建DataFrame对象


DataFrame就相当于数据库的一张表。它是个只读的表,不能在运算过程再往里加元素。

RDD.toDF(“列名”)

scala> val rdd = sc.parallelize(List(1,2,3,4,5,6))

rdd: org.apache.spark.rdd.RDD[Int] = ParallelCollectionRDD[0] at parallelize at :21

scala> rdd.toDF(“id”)

res0: org.apache.spark.sql.DataFrame = [id: int]

scala> res0.show#默认只显示20条数据

±–+

| id|

±–+

| 1|

| 2|

| 3|

| 4|

| 5|

| 6|

±–+

scala> res0.printSchema #查看列的类型等属性

root

|-- id: integer (nullable = true)

创建多列DataFrame对象

DataFrame就相当于数据库的一张表。

scala> sc.parallelize(List( (1,“beijing”),(2,“shanghai”) ) )

res3: org.apache.spark.rdd.RDD[(Int, String)] = ParallelCollectionRDD[5] at parallelize at :22

scala> res3.toDF(“id”,“name”)

res4: org.apache.spark.sql.DataFrame = [id: int, name: string]

scala> res4.show

±–±-------+

| id| name|

±–±-------+

| 1| beijing|

| 2|shanghai|

±–±-------+

例如3列的

scala> sc.parallelize(List( (1,“beijing”,100780),(2,“shanghai”,560090),(3,“xi’an”,600329)))

res6: org.apache.spark.rdd.RDD[(Int, String, Int)] = ParallelCollectionRDD[10] at parallelize at :22

scala> res6.toDF(“id”,“name”,“postcode”)

res7: org.apache.spark.sql.DataFrame = [id: int, name: string, postcode: int]

scala> res7.show

±–±-------±-------+

| id| name|postcode|

±–±-------±-------+

| 1| beijing| 100780|

| 2|shanghai| 560090|

| 3| xi’an| 600329|

±–±-------±-------+

可以看出,需要构建几列,tuple就有几个内容。

2、由外部文件构造DataFrame对象


1.读取txt文件

txt文件不能直接转换成,先利用RDD转换为tuple。然后toDF()转换为DataFrame。

scala> val rdd = sc.textFile(“/root/words.txt”)

.map( x => (x,1) )

.reduceByKey( (x,y) => x+y )

rdd: org.apache.spark.rdd.RDD[(String, Int)] = ShuffledRDD[18] at reduceByKey at :21

scala> rdd.toDF(“word”,“count”)

res9: org.apache.spark.sql.DataFrame = [word: string, count: int]

scala> res9.show

±-----±----+

| word|count|

±-----±----+

| spark| 3|

| hive| 1|

|hadoop| 2|

| big| 2|

| scla| 1|

| data| 1|

±-----±----+

2.读取json文件

文件代码:

{“id”:1, “name”:“leo”, “age”:18}

{“id”:2, “name”:“jack”, “age”:19}

{“id”:3, “name”:“marry”, “age”:17}

实现:

import org.apache.spark.sql.SQLContext

scala>val sqc=new SQLContext(sc)

scala> val tb4=sqc.read.json(“/home/software/people.json”)

scala> tb4.show

3.读取parquet文件

格式如下:

1>Parquet数据格式

Parquet是一种列式存储格式,可以被多种查询引擎支持(Hive、Impala、Drill等),并且它是语言和平台无关的。

Parquet文件下载后是否可以直接读取和修改呢?

Parquet文件是以二进制方式存储的,是不可以直接读取和修改的。Parquet文件是自解析的,文件中包括该文件的数据和元数据。

列式存储和行式存储相比有哪些优势呢?

可以只读取需要的数据,降低IO数据量;

压缩编码可以降低磁盘存储空间。由于同一列的数据类型是一样的,可以使用更高效的压缩编码进一步节约存储空间。

参考链接:

http://blog.csdn.net/yu616568/article/details/51868447 讲解了parquet文件格式

http://www.infoq.com/cn/articles/in-depth-analysis-of-parquet-column-storage-format 讲解了parquet列式存储。

实现:

scala>val tb5=sqc.read.parquet(“/home/software/users.parquet”)

scala> tb5.show

4.jdbc读取

实现步骤:

1)将mysql 的驱动jar上传到spark的jars目录下

2)重启spark服务

3)进入spark客户端

4)执行代码,比如在Mysql数据库下,有一个test库,在test库下有一张表为tabx

执行代码:

import org.apache.spark.sql.SQLContext

scala> val sqc = new SQLContext(sc);

scala> val prop = new java.util.Properties

scala> prop.put(“user”,“root”)

scala> prop.put(“password”,“root”)

scala>val tabx=sqc.read.jdbc(“jdbc:mysql://hadoop01:3306/test”,“tabx”,prop)

scala> tabx.show

±–±—+

一、Python所有方向的学习路线

Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照下面的知识点去找对应的学习资源,保证自己学得较为全面。

img
img

二、Python必备开发工具

工具都帮大家整理好了,安装就可直接上手!img

三、最新Python学习笔记

当我学到一定基础,有自己的理解能力的时候,会去阅读一些前辈整理的书籍或者手写的笔记资料,这些笔记详细记载了他们对一些技术点的理解,这些理解是比较独到,可以学到不一样的思路。

img

四、Python视频合集

观看全面零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。

img

五、实战案例

纸上得来终觉浅,要学会跟着视频一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。img

六、面试宝典

在这里插入图片描述

在这里插入图片描述

简历模板在这里插入图片描述

小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级Python工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Python爬虫全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频

如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注:python)
img

96ac44da8af500c049bb72fbd.png#pic_center)

小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级Python工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Python爬虫全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频

如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注:python)
[外链图片转存中…(img-3EqdpRAP-1711069270058)]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值