前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >想学spark但是没有集群也没有数据?没关系,我来教你白嫖一个!

想学spark但是没有集群也没有数据?没关系,我来教你白嫖一个!

作者头像
TechFlow-承志
发布2020-05-26 00:04:15
1.2K0
发布2020-05-26 00:04:15
举报
文章被收录于专栏:TechFlowTechFlow

databricks

今天要介绍的平台叫做databricks,它是spark的创建者开发的统一分析平台。单凭spark创建者这几个字大家应该就能体会到其中的分量,其中集成了Scala、Python和R语言的环境,可以让我们在线开发调用云端的spark集群进行计算。

最最关键的是,它提供免费的社区版本,每个开发者都可以获得15GB内存的免费运行环境。非常适合我们初学者进行学习。

说来惭愧我也是最近才知道这么一个平台(感谢sqd大佬的分享),不然的话也不用在本地配置spark的环境了。下面简单介绍一下databricks的配置过程,我不确定是否需要梯子,目测应该可以正常访问。有知道的小伙伴可以在留言板里评论一下。

首先,我们访问:https://community.cloud.databricks.com/

然后点击注册按钮,创建新用户:

跳转之后会让我们填写一些个人的基本信息,比如姓名、公司名称、工作邮箱还有使用这个平台的目的,等等。

我实际验证过,这里的公司没有校验,应该可以随意填写,比如你可以填tencent或者是alibaba都是可以的。工作邮箱我们可以留qq邮箱,并不会做公司邮箱后缀校验,所以学生党们可以不用担心,假装自己在某家心仪的公司就可以了。然后选一下目的这个也都很简单大家自由选择,选好了之后,我们点击sign up就好了。

这里说明一下,如果留qq邮箱的话验证邮件会被qq当做垃圾邮件放入垃圾箱,所以记得去垃圾箱里查看。然后我们点击邮件中的链接设置密码就完成了。

配置环境

注册好了之后,我们就可以进行愉快地使用了。首先我们创建一个新的集群,点击菜单栏左侧的clusters然后选择一下spark的版本填一下集群的名称即可。

spark的版本可以不用更改,填好名字之后点击create cluster即可。系统有一点点慢,稍微等一会再刷新就会发现列表当中多了一个集群。集群的启动需要一点时间,我们耐心等待即可。

等集群创建好了之后, 我们就可以创建notebook进行愉快地编码了。

我们点击home然后选择自己的账号,点击create notebook。

接着会有一个弹框让我们选择语言和集群,这里的语言我们选Python,如果你喜欢也可以换成Scala。集群就选择我们刚才创建的test集群。

我们点击create之后就会自动打开一个notebook的页面,我们就可以在里面编码了。为了测试一下环境,我们输入sc,看一下是否会获得sparkContext。

结果和我们预期一致,说明已经配置好了。以后我们就可以在这个集群当中愉快地玩耍和实验了。它除了自带很多给初学者进行学习的数据集之外,还允许我们自己上传文件,可以说是非常良心了。

实验

接下来我们利用这个平台来进行一个spark sql的小实验,来实际体会一下databricks和spark sql的强大。

我们这个实验用到的数据是databricks自带的数据集,一共用到两份数据,分别是机场信息的数据以及航班延误的数据。我们要做的事情很简单,就是将这两份数据join在一起,然后观察一下每一个机场延误的情况。这份数据当中只有美国,所以对我们大多数人没什么价值,仅仅当做学习而已。

首先,我们通过相对路径从databricks的数据集当中获取我们需要的这两份数据:

代码语言:javascript
复制
flightPerFilePath = "/databricks-datasets/flights/departuredelays.csv"
airportsFilePath = "/databricks-datasets/flights/airport-codes-na.txt"

databricks中的数据集都在databricks-datasets路径下,我们可以通过这行代码查看,你会发现这里面数据集非常多,简直是初学者的福音。

代码语言:javascript
复制
display(dbutils.fs.ls("/databricks-datasets"))

接着,我们用dataframe的api从路径当中生成dataframe:

代码语言:javascript
复制
airports = spark.read.csv(airportsFilePath, header='true', inferSchema='true', sep='\t')
flightPerf = spark.read.csv(flightPerFilePath, header='true')

flightPerf.cache()

由于这两份数据一份是csv一份是txt,所以读取的时候格式有所区别。flight是csv文件,我们直接读取即可。而airports是txt文件,所以我们需要指定分隔符,inferSchema这个参数表示系统会自动推断它的schema。

我们读取完之后,notebook会非常友好地把字段的信息一并输出出来,我们可以看到字段的名称和它对应的类型。

接下来要做的就很简单了,只需要将这两者关联到一起即可。我们观察一下好像并没有发现可以join的key,这是因为这份数据比较特殊,航班当中记录机场的信息并不是通过名称,而是通过特定的代码,在数据集中这个字段叫做origin,而机场数据也有同样的代码,叫做IATA(国际运输协会)。

我们想要将这两份数据join在一起,然后把延误的时间相加,看看哪些机场的延误时间最多,按照延误时间倒序排序。

这个需求如果用SQL写很简单,稍微了解过SQL语法的同学应该就可以写出来:

代码语言:javascript
复制
select a.City, f.origin, sum(f.delay) as Delays
from FlightPerformance f
join airports a
on a.IATA = f.origin
where a.State = 'WA'
group by a.City, f.origin
order by sum(f.delay) desc

但如果用上dataframe的api来实现则要麻烦得多。虽然代码量并不大,基于流式计算,严格说起来只有一行代码:

代码语言:javascript
复制
from pyspark.sql.functions import desc
airports.join(
  flightPerf, 
  airports.IATA == flightPerf.origin
).select('City', 'origin', 'delay')
.groupBy(['City', 'origin'])
.agg({'delay': 'sum'})
.withColumnRenamed('sum(delay)', 'Delays')
.orderBy(desc('Delays'))
.show()

虽然逻辑上和SQL完全一样,但是写起来还是要费劲一些。所以我们可以考虑将dataframe转化成视图,然后用SQL来操作它:

代码语言:javascript
复制
airports.createOrReplaceTempView('airports')
flightPerf.createOrReplaceTempView('FlightPerformance')

接着我们就可以调用spark.sql来传入SQL代码进行数据处理了:

代码语言:javascript
复制
spark.sql("""
select a.City, f.origin, sum(f.delay) as Delays
from FlightPerformance f
join airports a 
on a.IATA = f.origin
where a.State = 'WA'
group by a.City, f.origin
order by sum(f.delay) desc"""
         ).show()

这样明显就方便了很多,还没完,由于我们使用的是notebook,在notebook支持许多魔法操作,比如我们可以通过%sql来直接在其中写一段SQL。notebook会自动将它转化成dataframe的语句进行执行,不但如此,还可以以图表的形式展示数据:

代码语言:javascript
复制
%sql

select a.City, f.origin, sum(f.delay) as Delays
from FlightPerformance f
join airports a
on a.IATA = f.origin
where a.State = 'WA'
group by a.City, f.origin
order by sum(f.delay) desc

输出的结果是这样的:

不但如此,我们还可以在下方的选择栏当中选择我们想要的图表展现形式。比如我们可以选择饼图:

还没完,databricks当中还集成了地图,比如我们想看一下美国各个州的数据,这个很容易写出SQL:

代码语言:javascript
复制
%sql

select a.State, sum(f.delay) as Delays
from FlightPerformance f
join airports a
on a.IATA = f.origin
where a.Country = 'USA'
group by a.State

得到的结果默认是以柱状图展示:

我们在图表类型当中选择map:

接下来就是见证奇迹的时刻,会得到一张带着数据的美国地图,美国各个州的情况一览无余。

总结

今天的内容到这里就结束了,关于databricks还有很多实用的功能,由于篇幅限制就不一一介绍了,大家感兴趣的可以自己研究一下。

我个人觉得这个平台非常出色,除了写代码体验以及数据可视化做得非常好之外,功能强大,最关键还是免费的,非常适合我们学生党以及个人学习使用。毕竟对于我们个人而言,拥有一个强大的spark集群并不容易,希望大家都能用好这个平台,有所收获。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-05-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Coder梁 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 配置环境
  • 实验
  • 总结
相关产品与服务
流计算 Oceanus
流计算 Oceanus 是大数据产品生态体系的实时化分析利器,是基于 Apache Flink 构建的企业级实时大数据分析平台,具备一站开发、无缝连接、亚秒延时、低廉成本、安全稳定等特点。流计算 Oceanus 以实现企业数据价值最大化为目标,加速企业实时化数字化的建设进程。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档