1、进入spark
- 导入包对象
from pyspark import SparkContext, SparkConf
- 初始化对象
conf = SparkConf().setAppName(appName).setMaster(master)
sc = SparkContext(conf=conf)
如果使用的是命令行:对象则已经初始化好了
2 使用命令行
- 使用4个cpu核心
$ ./bin/pyspark --master local[4]
- 把code.py文件添加到搜索路径中
$ ./bin/pyspark --master local[4] --py-files code.py
- 用ipython 启动命令行
$ PYSPARK_DRIVER_PYTHON=ipython ./bin/pyspark
### 使用ipython notebook 选项
$ PYSPARK_DRIVER_PYTHON=ipython PYSPARK_DRIVER_PYTHON_OPTS="notebook --pylabinline" ./bin/pyspark
- 更多命令
./bin/pyspark --help
3 RDD 介绍
Spark是以RDD概念为中心运行的。RDD是一个容错的、可以被并行操作的元素集合。创建一个RDD有两个方法:在你的驱动程序中并行化一个已经存在的集合;从外部存储系统中引用一个数据集,这个存储系统可以是一个共享文件系统,比如HDFS、HBase或任意提供了Hadoop输入格式的数据来源。
- 构建并行化集合
data = [1, 2, 3, 4, 5]
distData = sc.parallelize(data,2) #后面2表示使用分片数,一个集合对应2-4个分片
- 加载外部数据集
distFile = sc.textFile("data.txt",2) #分片数为二
textFile("/my/directory")#读取当前文件夹中全部
textFile("/my/directory/*.txt")#读取全部txt
textFile("/my/directory/*.gz")#读取全部gz
可写类型 | Python类型 |
---|---|
Text | unicode str |
IntWritable | int |
FloatWritable | float |
DoubleWritable | float |
BooleanWritable | bool |
BytesWritable | bytearray |
NullWritable | None |
MapWritable | dict |
- 序列文件的保存与读取
rdd = sc.parallelize(range(1, 4)).map(lambda x: (x, "a" * x ))
rdd.saveAsSequenceFile("path/to/file") #保存序列文件
sorted(sc.sequenceFile("path/to/file").collect()) #读取序列文件并排序
4、RDD 的基本操作-wordcount程序
rdd1 = sc.textFile("/spark/wc.txt") # 读取目标文件
rdd2 = rdd1.map(lambda a : a.split('')) #将每行切分成单词
rdd3 = rdd.flatMap(lambda a:(a,1)) # 做map映射,这里的列表嵌套,所以用flatMap
rdd4 = rdd.reduceByKey(lambda a,b:a + b) #按单词key 来统计数量
rdd4.collect() # 结果