最近参加一个大数据比赛,发现处理这些数据如果使用普通的代码需要非常长的时间。同时最近也学校也开了相关课程提到如何在Python下使用Spark,所以安装PySpark,这里记录下,方便他人和自己的使用。
安装环境:
Java6+
python2.6+ or python3.4+
(需要Java和python添加到相关PATH中)
安装Spark
- 下载
Spark官网下载地址
这里可以选择相应的配置。我选择的是(spark2.0.2和hadoop2.7) - 解压压缩包
tar -xzf spark-2.0.2-bin-hadoop2.7.tgz
解压压缩包,获得spark相应位置
- 下载
- 移动spark位置
mv spark-2.0.2-bin-hadoop2.7 /srv/spark-2.0.2
在这里可以将spark文件移动到任意一个位置。我这里移动到/srv下 建立软链接
ln -s /srv/spark-2.0.2 /srv/spark
创建指向该Spark版本的符号链接到spark目录。这样你可以简单地下载新/旧版本的Spark,然后修改链接来管理Spark版本,而不用更改路径或环境变量。
- 修改配置文件,添加到Path中
修改BASH配置,将Spark添加到PATH中,设置SPARK_HOME环境变量。编辑~/.bash_profile或~/.profile文件,将以下语句添加到文件中
export SPARK_HOME=/srv/spark export PATH=$SPARK_HOME/bin:$PATH
PS:‘=’两边不能有空格
- 测试运行安装情况
source这些配置(或者重启终端),你就可以在本地运行一个pyspark解释器。
- 修改配置文件,添加到Path中
source .profile
pyspark
结果如下:
到这里已经顺利安装好Pyspark了。接下来要配置Ipython-notebook的运行环境。
- 配置Ipython-notebook,使用spark
- 为Spark创建一个iPython notebook配置
ipython profile create spark
- 创建文件$HOME/.ipython/profile_spark/startup/00-pyspark-setup.py,并添加如下代码:
import os
import sys
# Configure the environment
if 'SPARK_HOME' not in os.environ:
os.environ['SPARK_HOME'] = '/srv/spark'
# Create a variable for our root path
SPARK_HOME = os.environ['SPARK_HOME']
# Add the PySpark/py4j to the Python Path
sys.path.insert(0, os.path.join(SPARK_HOME, "python", "build"))
sys.path.insert(0, os.path.join(SPARK_HOME, "python"))
- 使用我们刚刚创建的配置来启动IPython notebook。
ipython notebook --profile spark
- 在IPython notebook最上面,确保你添加了Spark context。
from pyspark import SparkContext
sc = SparkContext( 'local', 'pyspark')
'''这里可能会报
ImportError: No module named py4j.java_gateway
ImportError: cannot import name accumulators
#解决方法:pip install py4j
'''
- 测试
def isprime(n):
"""
check if integer n is a prime
"""
# make sure n is a positive integer
n = abs(int(n))
# 0 and 1 are not primes
if n < 2:
return False
# 2 is the only even prime number
if n == 2:
return True
# all other even numbers are not primes
if not n & 1:
return False
# range starts with 3 and only needs to go up the square root of n
# for all odd numbers
for x in range(3, int(n**0.5)+1, 2):
if n % x == 0:
return False
return True
# Create an RDD of numbers from 0 to 1,000,000
nums = sc.parallelize(xrange(1000000))
# Compute the number of primes in the RDD
print nums.filter(isprime).count()
运行完这段代码。如果出现数字并没有报错,那么说明已经安装成功了~~!