查看原文
其他

Spark与Python结合:PySpark初学者指南

Editor's Note

Apache Spark是目前处理和使用大数据的最广泛使用的框架之一,Python是数据分析,机器学习等最广泛使用的编程语言之一。

那么,为什么不一起使用它们呢?这就是Spark与python也被称为PySpark的原因。

The following article is from 21CTO Author 21CTO

在这篇文章中,我们将介绍如何使用Apache Spark或PySpark来执行大量数据分析。


Apache Spark开发人员每年的平均年薪为110,000美元。毫无疑问,Spark在这个行业中已经被广泛使用。由于其丰富的库集,Python今天被大多数数据科学家和分析专家使用。


将Python与Spark集成是开源社区的主要礼物。Spark是用Scala语言开发的,与Java非常相似。它将程序代码编译为用于Spark大数据处理的JVM的字节码。为了支持Spark和Python,Apache Spark社区发布了PySpark。在本文中,我们将讨论以下主题:


1、Apache Spark简介及其功能

2、为什么选择Python?

3、使用Python设置Spark(PySpark)

4、PySpark SparkContext和数据流

5、PySpark KDD用例


Apache Spark是Apache Software Foundation开发的用于实时处理的开源集群计算框架。Spark提供了一个接口,用于编程具有隐式数据并行和容错功能的集群。




下面是Apache Spark的一些特性,它比其它的大数据框架的优势在于:


1、速度:比传统的大型数据处理框架快100倍。

2、强大的缓存:简单的编程层提供了强大的缓存和磁盘持久性功能。

3、部署:可以通过Mesos,通过Yarn的Hadoop或Spark自己的集群管理器进行部署。

4、实时:由于内存中的计算,实时计算和低延迟。

5、多语言:这是该框架最重要的特性之一,因为它可以在Scala,Java,Python和R语言中编程。


虽然Spark是在Scala中设计的,但它的速度比Python快10倍,但只有当使用的内核数量少时,Scala才会更快。由于现在大多数分析和处理都需要大量内核,因此Scala的性能优势并不大。



对于程序员来说,由于其语法和标准库,Python相对来说更容易学习。而且,它是一种动态类型语言,这意味着RDD可以保存多种类型的对象。



尽管Scala拥有SparkMLlib,但它没有足够的库和工具来实现机器学习和NLP目的。此外,Scala缺乏数据可视化。



使用Python设置Spark(PySpark)


我们应该如何下载Spark并安装它,当你已经解压缩了spark文件,安装它并将其添加到.bashrc文件的路径中,输入:source .bashrc


export SPARK_HOME = /usr/lib/hadoop/spark-2.1.0-bin-hadoop2.7export PATH = $PATH:/usr/lib/hadoop/spark-2.1.0-bin-hadoop2.7/bin


要打开PySpark shell,输入命令:./bin/pyspark



Apache Spark由于它具有令人惊叹的功能,如内存处理,polyglot和快速处理等,被许多公司用于各种行业:



Yahoo!使用Apache Spark的机器学习功能来个性化其新闻和网页以及推荐式广告。使用Spark和Python来找出哪些新闻用户有兴趣阅读和分类新闻报道,以找出哪类用户有兴趣阅读哪些新闻类别。


TripAdvisor使用Apache Spark通过比较数百个网站为其客户找到最佳酒店价格,向数百万旅客提供建议。以可读格式阅读和处理酒店评论所需的时间是在Apache Spark的帮助下完成的。


阿里巴巴运营着全球最大的Apache Spark集群,以便在其电子商务平台上分析数百PB以上的数据。


PySpark SparkContext与数据流


用Python来连接Spark,使用RD4s可以通过库Py4j来实现。PySpark Shell将Python API链接到Spark Core并初始化Spark Context。Spark上下文是任何Spark应用程序的核心。


1、Spark Context设置内部服务并建立到Spark执行环境的连接。

2、驱动程序中的Spark Context对象协调所有分布式进程并允许资源分配。

3、集群管理器提供执行程序,它们是具有逻辑的JVM进程。

4、Spark Context对象将应用程序发送给执行者。

5、Spark Context在每个执行器中执行任务。


PySpark KDD用例


现在让我们来看一个用例:KDD'99 Cup(国际知识发现和数据挖掘工具竞赛)。这里我们将取数据集的一部分,因为原始数据集太大。


import urllibf = urllib.urlretrieve ("http://kdd.ics.uci.edu/databases/kddcup99/kddcup.data_10_percent.gz", "kddcup.data_10_percent.gz")


创建 RDD:

现在我们用这个下载的文件来创建RDD。


过滤


假设我们要计算在数据集中有多少正常的相互作用。我们可以按如下过滤raw_data RDD。


统计:

现在我们来计算新RDD中有多少元素:

输出结果如下:

映射:

在这种情况下,我们想要将数据文件作为CSV格式文件读取。我们可以通过对RDD中的每个元素应用lambda函数来做到这一点,如下所示。这里我们使用map()和take()函数转换。


输出结果:


拆分:


现在我们希望将RDD中的每个元素都作为键值对(其中键是标记)(例如normal),并且该值是表示CSV格式文件中的行的整个元素列表。可以按如下进行, 这里我们用line.split()和map()函数。


输出结果如下:


收集行为:

这里我们将使用collect()行为。它会将RDD的所有元素存入内存。因此,使用大型RDD时必须小心使用。


输出结果如下:


当然,这比我们之前使用的其他任何动作花费的时间要长。每个具有RDD片段的Spark工作节点都必须进行协调,以便检索其部分,然后将所有内容缩小到一起。


作为结合前面所有内容的最后一个例子,我们希望收集所有常规交互作为键值对。



输出结果如下 :

希望你喜欢Python这篇文章,如果已经在阅读完全部内容,恭喜你不再是PySpark的新手了。


周四愉快。


作者:飞花逐月

来源:21CTO

点击下方图片即可阅读

面试真经 | 大数据/数仓面试灵魂30问


更多精彩

欢迎加入数仓BI技术交流群。进群方式:请加小助微信(微信号:iom1128),回复:数据,审核通过(备注:职位+城市) 会自动拉你进群。

今日荐文

点击下方文字即可阅读

  1. 大数据高级开发

  2. 最快开源OLAP引擎!ClickHouse在头条实践

  3. “失败”的北漂十年,我真的尽力了!

  4. 教育部官宣:985/211已成为历史!

  5. 一文搞定Superset安装部署

  6. 2020互联网大厂薪资出炉!

  7. 有幸去华为面试数据分析岗

  8. 数仓蓝图:如何优雅地规划数仓体系



觉得内容不错的话 请分享到朋友圈哦~

▼ 福利时刻 ▼ 


01. 后台回复「经典」,即可领取大数据数仓经典书籍。


技术大佬们在等你,各种资源定期分享~


Q: 关于数据仓库,你还想了解什么?

欢迎留言区与大家分享

觉得不错,请把这篇文章分享给你的朋友哦

入群请联系小助手:iom1128『紫霞仙子』

更多精彩,请戳"阅读原文"到"数仓之路"查看

更多精彩,请戳"阅读原文"到"数据分析"查看

 

 

关注不迷路~ 各种福利、资源定期分享

在看”的永远18岁~


您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存