park安装略,下载解压配置下就OK 我使用的是spark-2.2.0-bin-hadoop2.7
安装完毕后需要配置一下SPARK_HOME:
SPARK_HOME=C:\spark\spark-2.2.0-bin-hadoop2.7
Path里也要记得添加一下:
Path=XXXX;%SPARK_HOME%\bin;
Python与Spark交互主要用到pyspark这个模块,所以需要准备好扩展包,详细请参考《
Whl安装好后,能得到一个py4j文件夹,但是还需要pyspark模块这个文件夹里的内容,pyspark的获得更简单,直接去复制spark-2.2.0-bin-hadoop2.7/python/pyspark就好了。
PS:在某些版本的pyspark调用时会出现,自己稍微查下原因,网上都有配套的py文件可以覆盖,这里不是本文的重点,所以略过。
我们在《Spark原理详解》中介绍过,RDD分为转化(transformation)和动作(action)两种操作。RDD是基于当前的partitions生成新的partitions;动作是基于当前的partitions生成返回对象(数值、集合、字典等)。所以在通过python调用spark的API时需要搞清楚返回值是什么。如果返回的是partitions,调用collect()函数可以拿到封装后的数据集,分区部分对客户端是透明的,也可以调用glom()来关心具体的分区情况。如果调用的是action那么就简单得多,API直接返回结果内容。
Map、Reduce API:
最典型,也是最基本的入门API
from pyspark import SparkContext
sc = SparkContext('local')
#第二个参数2代表的是分区数,默认为1
old=sc.parallelize([1,2,3,4,5],2)
newMap = old.map(lambda x:(x,x**2))
newReduce = old.reduce(lambda a,b : a+b)
print(newMap.glom().collect())
print(newReduce)
[[(1, 1), (2, 4)], [(3, 9), (4, 16), (5, 25)]]
15
SparkContext是代码的核心,初始化时需要设置spark的启动类型,分为local、Mesos、YARN、Standalone模式(详见
Map和reduce里都要设置一个function,我们这里用了lambda匿名函数来实现。从结果可以看将前两和后三个分别放在了1个分区中,reduce是个action直接返回的是key的sum。
预留问题:能否reduce按第二行进行求和合并,how?
flatMa