Hadoop之spark浅析

🙀Hive之后,接下来就是Spark,Spark是由Scala语言编写,但是也提供其他语言的API供我们访问,让我们开启python学习spark的第一章👊

1.SparkSession

我们真正开始编写spark应用程序时,需要一种将用户命令和数据发送给spark的方法,我们通过创建一个SparkSession来实现。或者说,SparkSession就是用来控制spark程序的驱动,每一个spark应用程序都需要一个SparkSession与之对应。在Scala和Python中,你启动控制台,这个SparkSession就会被实例化成一个名叫spark的对象。
在这里插入图片描述

2.DataFrame

DataFrame大家太熟悉了,在spark中也有这种类型,在spark中dataframe的列和列类型的一些规则被称为模式(schema)。与其它语言中dataframe不一样的是,其他语言的dataframe位于一台计算机上,而spark的dataframe可以跨越数千台计算机。原因是因为数据太大或者数据处理太慢。这里我们创建一个简单的dataframe类型。

#创建一列dataframe列名为num
spdf=spark.range(100).toDF("num")
#显示前10行
spdf.show(10)#这里的show是这真的计算了,我是为了显示效果

结果如下:
在这里插入图片描述

3.数据分区

为了使机器能够并行地工作,spark将数据分解成多个数据块,每个数据块叫做一个分区,分区是位于集群中的一台物理机上的多行数据的集合,Dataframe的分区也说明在执行过程中数据在集群中的物理分布。如果只有一个分区,即使拥有数千个执行器,spark也只有一个执行器在处理数据。类似的,如果有多个分区,但只有一个分类器,那么spark仍然只有一个执行器在处理数据,因为只有一个计算资源单位。
在使用dataframe时,大部分情况下你不需要手动操作分区,只需要指定数据的高级转换操作,然后spark决定此工作如何在集群上执行。

4.转换操作

Spark的核心数据结构在计算过程中是保持不变的,这意味着他们在创建之后是无法改变的,无法改变那该如何使用?这就需要你告诉spark如何修改dataframe,此过程被称为转换。
执行这些转化并没有实际输出,这是因为我们仅仅指定了一个抽象转换。我们在调用一个动作之前,spark并不会真的执行转换操作。转换有两种方式:

  • 窄依赖:每个输入分区仅仅决定一个输出分区的转换。(内存)
  • 宽依赖:每个输入分区决定了多个输出分区,这种操作叫做shuffle。(磁盘)
    例如:查找dataframe中所有的偶数
#我们使用上次创建的dataframe
df2=spdf.where("num%2=0")
df2.show(10)#这里的show是这真的计算了,我是为了显示效果

结果如下:
在这里插入图片描述
我们这里引出了一个叫做惰性评估的概念:即spark需要等到绝对需要时才执行计算。当用户需要对数据进行操作时,不是立即修改数据,而是建立一个转换计划,spark首先会对这个计划编译成可以在集群中高速运行的流水线式的物理执行计划,然后等待,直到最后时刻才开始执行代码。

5.动作操作

转换操作能够使我们建立逻辑转换计划,为了触发计算,我们需要一个动作操作。最简单的动作操作是count。它计算一个dataframe中的记录总数。这一类的动作有三类:

  • 在控制台查看的动作
  • 在某个语言中将数据汇集为原生对象的动作
  • 写入输出数据源的动作
    在这里插入图片描述

参考资料

《Hadoop权威指南》
《大数据hadoop3.X分布式处理实战》
《Spark权威指南》
《Pyspark实战》

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

柳小葱

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值