在本地运行pyspark

时间:2017-04-17 12:12:47

标签: python apache-spark pyspark

我试图按照本书中的说明操作:

Large Scale Machine Learning with Python

它使用VM映像运行涉及Oracle VM VirtualBox和Vagrant的Spark。我几乎设法让VM正常工作,但由于没有在BIOS中切换虚拟化的权限而被阻止(我没有密码,并怀疑我的雇主的IT部门将允许我打开它)。另见讨论here

无论如何,我还有什么其他选择可以在本地使用sparkpy(在本地安装)?我的第一个目标是获取此Scala代码:

scala> val file = sc.textFile("C:\\war_and_peace.txt")
scala> val warsCount = file.filter(line => line.contains("war"))
scala> val peaceCount = file.filter(line => line.contains("peace"))
scala> warsCount.count()
res0: Long = 1218
scala> peaceCount.count()
res1: Long = 128

在Python中运行。任何指针都会非常感激。

1 个答案:

答案 0 :(得分:5)

所以你可以在windows上用python和scala shell设置Spark,但需要注意的是,根据我的经验,windows上的性能不如osx和linux。如果你想在Windows上设置所有内容的路线,我不久前写了一些简短的说明,你可以查看here。我正在粘贴下面的文本,只是因为我从那个仓库移动文件或链接因其他原因而中断。

下载并解压Spark

从apache下载最新版本的spark。 请注意,为您选择的spark版本获取正确的Hadoop二进制文件至关重要。请参阅下面的Hadoop二进制文件部分。 用7-zip提取。

安装Java和Python

安装最新版本的64-bit Java。 为所有用户安装Anaconda3 Python 3.5, 64-bit(或您选择的其他版本)。重启服务器。

测试Java和Python

打开命令行并输入java -version。如果安装正确,您将看到如下输出: java version "1.8.0_121" Java(TM) SE Runtime Environment (build 1.8.0_121-b13) Java HotSpot(TM) 64-Bit Server VM (build 25.121-b13, mixed mode) 输入pythonpython --version。 第一个将在显示版本信息后打开python shell。第二个将仅显示与此类似的版本信息: Python 3.5.2 :: Anaconda 4.2.0 (64-bit)

下载适用于Windows 64位的Hadoop二进制文件

你可能没有在Windows上安装Hadoop,但是火花将在其核心内容中深入查看此文件以及可能的其他二进制文件。值得庆幸的是,Hadoop贡献者编译了这些并且有一个repository,其中包含Hadoop 2.6的二进制文件。这些二进制文件适用于spark版本2.0.2,但不适用于2.1.0。要使用spark 2.1.0,请从here下载二进制文件。

最好的策略是克隆存储库并保留与您的spark版本对应的Hadoop文件夹,并将hadoop-%version%文件夹添加到您的路径HADOOP_HOME

将Java和Spark添加到环境

将java和spark的路径分别添加为环境变量JAVA_HOME和SPARK_HOME。

测试pyspark

在命令行中,键入pyspark并观察输出。此时spark应该在python shell中开始。

设置pyspark以使用Jupyter笔记本

在pyspark代码中存在使用交互式python shell和pyspark的说明,可以通过编辑器访问。要在启动pyspark之前使用Jupyter笔记本,请键入以下两个命令:

set PYSPARK_DRIVER_PYTHON=jupyter set PYSPARK_DRIVER_PYTHON_OPTS='notebook' 设置这些变量后,pyspark将在Jupyter笔记本中启动,默认SparkContext初始化为sc,SparkSession初始化为spark。 ProTip:打开http://127.0.0.1:4040以查看spark UI,其中包含有关管道和已完成流程的大量有用信息。任何额外的笔记本电脑打开火花运行将在连续的端口,即4041,4042等......

首要问题是,为您的spark版本获取正确版本的Hadoop二进制文件至关重要。其余的是确保正确配置您的路径和环境变量。