Apache Spark 是数据科学领域最热门的框架之一。它实现了将大数据和机器学习结合在一起的潜力。这是因为
- 它提供了强大、分布式、容错的数据对象(称为 RDD)。
- 由于内存操作,它速度很快(比传统的 Hadoop MapReduce 快达 100 倍)。
- 它通过 MLlib 和 GraphX 等补充包,与机器学习和图分析领域完美集成。

Spark 基于 Hadoop/HDFS 实现,主要用 Scala 编写,Scala 是一种在 Java 虚拟机 (JVM) 上运行的函数式编程语言。
然而,Scala 对于初涉数据科学领域的人来说,并不是一个很好的入门语言。幸运的是,Spark 提供了一个出色的 Python API,称为 PySpark。PySpark 允许 Python 程序员与 Spark 框架交互——让他们能够大规模地操作数据,并处理分布式文件系统上的对象。

为什么使用 Jupyter Notebook?
像 Spark 这样的大数据框架的优势只有在集群上运行,并且具有大量节点时才能实现。不幸的是,要学习和实践这一点,你需要花钱。一些选择是
- 带有 S3 存储的 Amazon Elastic MapReduce (EMR) 集群
- Databricks 集群(付费版本;免费社区版本在存储和集群选项方面相当有限)
这些选项都需要花钱——即使是开始学习也需要(例如,Amazon EMR 不像 EC2 或 S3 实例那样包含在一年免费套餐计划中)。
但是,如果你精通 Python/Jupyter 和机器学习任务,那么从在本地机器上启动单个集群开始是完全合理的。如果你想要更多的存储和内存,也可以在 Amazon EC2 上运行一个。
请记住,Spark 不是你必须学习的新编程语言;它是一个在 HDFS 之上工作的框架。它引入了新的概念,如节点、惰性求值以及编程的转换-动作(或“map and reduce”)范式。
Spark 也足够通用,可以与 Hadoop 以外的文件系统一起工作,例如 Amazon S3 或 Databricks (DBFS)。
但思路始终是一样的。你将大型数据集分成小的、固定大小的块,分布(和复制)到多个节点上,然后将计算引擎靠近它们,使整个操作并行化、容错化和可扩展。
通过使用 PySpark 和 Jupyter Notebook,你可以在不花任何钱的情况下学习所有这些概念。你还可以轻松地与 SparkSQL 和 MLlib 交互,进行数据库操作和机器学习。
如果你事先内化了这些概念,那么开始使用真实的大型集群将容易得多。
然而,与大多数 Python 库不同,PySpark 的入门不像 pip install 和 import 那样简单直接。大多数具有 Python 背景的用户认为这种工作流程是理所当然的。但是,PySpark+Jupyter 组合需要比其他流行的 Python 包更多的关爱。
在这个简短的教程中,我将逐步介绍如何在你的系统上设置 PySpark 及其所有依赖项,并将其与 Jupyter Notebook 集成。
本教程假设你正在使用 Linux 操作系统。这是因为在现实生活中,你几乎总是会在使用 AWS 或 Azure 等云服务的集群上运行和使用 Spark。这些 集群节点可能运行 Linux。
熟悉基于 Linux 命令行设置过程来运行和学习 Spark 是明智的。如果你正在使用 Windows,你可以使用 Oracle Virtual Box 在 Windows 机器上设置 Ubuntu 发行版。
安装和设置
PySpark 的最新版本需要 Python 3.4+,因此请确保在继续之前安装了它。(早期版本的 Python 将无法工作。)
python3 --version
安装 pip3 工具。
sudo apt install python3-pip
为 Python 3 安装 Jupyter。
pip3 install jupyter
增强 PATH 变量,以便可以从任何地方轻松启动 Jupyter Notebook。
export PATH=$PATH:~/.local/bin
选择一个 Java 版本。这很重要;Java 的变体比 现代美国商店里的谷物品牌还要多。Java 8 可以与 UBUNTU 18.04 LTS/SPARK-2.3.1-BIN-HADOOP2.7 一起工作,因此我们将选择该版本。
sudo add-apt-repository ppa:webupd8team/java
sudo apt-get install oracle-java8-installer
sudo apt-get install oracle-java8-set-default
检查安装。
java -version
设置一些与 Java 相关的 PATH 变量。
export JAVA_HOME=/usr/lib/jvm/java-8-oracle
export JRE_HOME=/usr/lib/jvm/java-8-oracle/jre
安装 Scala。
sudo apt-get install scala
检查 Scala 安装。
scala -version
为 Python-Java 集成安装 py4j。
pip3 install py4j
安装 Apache Spark;转到 Spark 下载页面 并选择最新(默认)版本。我使用的是 Spark 2.3.1 和 Hadoop 2.7。下载后,将其解压到你要使用的位置。
sudo tar -zxvf spark-2.3.1-bin-hadoop2.7.tgz
现在,将一长串命令添加到你的 .bashrc shell 脚本中。这些命令将设置环境变量,以使用 Python 3 启动 PySpark,并使其能够从 Jupyter Notebook 中调用。在继续之前,备份 .bashrc。
使用你喜欢的任何编辑器打开 .bashrc,例如 gedit .bashrc。在末尾添加以下行
export SPARK_HOME='/{YOUR_SPARK_DIRECTORY}/spark-2.3.1-bin-hadoop2.7'
export PYTHONPATH=$SPARK_HOME/python:$PYTHONPATH
export PYSPARK_DRIVER_PYTHON="jupyter"
export PYSPARK_DRIVER_PYTHON_OPTS="notebook"
export PYSPARK_PYTHON=python3
export PATH=$SPARK_HOME:$PATH:~/.local/bin:$JAVA_HOME/bin:$JAVA_HOME/jre/bin
请记住将 {YOUR_SPARK_DIRECTORY} 替换为你上面解压 Spark 的目录。
你可以通过转到 {YOUR_SPARK_DIRECTORY} 内的 /bin 目录并运行 spark-shell –version 命令来检查你的 Spark 设置。在这里你可以看到你拥有的 Spark 版本以及它正在使用的 Java 和 Scala 版本。

就是这样!现在你应该能够启动 Jupyter Notebook 并从任何地方开始使用 PySpark 了。
例如,如果我创建了一个目录 ~/Spark/PySpark_work 并在那里工作,我可以启动 Jupyter。

但是等等……我在哪里调用了类似 pip install pyspark 的东西?
我没有。PySpark 与 Spark 下载包捆绑在一起,并通过正确设置环境变量和绑定来工作。所以你现在一切就绪了!
关于此主题的下一步
我正在编写一份关于 PySpark DataFrame 操作的详细入门指南。如果你有任何问题或想法要分享,请通过 tirthajyoti[AT]gmail.com 与我联系。如果你像我一样,对机器学习和数据科学充满热情,请在 LinkedIn 上添加我 或在 Twitter 上关注我。另外,请查看我的 GitHub repo,了解 Python、R 或 MATLAB 中的其他有趣的代码片段以及其他一些机器学习资源。
最初发布于 FreeCodeCamp。根据 CC BY-SA 4.0 许可协议获得许可。
评论已关闭。