使用 Python 编写 Spark 交互程序:
1. 启动 Spark Shell
在spark-shell中,已经创建了一个名为 sc 的 SparkContext 对象
./bin/spark-shell --master local[4] --jars testcode.py
--master 用来设置 context 将要连接并使用的资源主节点
使用 --jars 可以添加 Jar 包的路径
spark-shell 的本质是在后台调用了spark-submit 脚本来启动应用程序。
2. 加载 text 文件
加载本地文件创建RDD。
我们以加载 Spark 自带的本地文件 README.md 文件进行测试,返回一个 MapPartitionsRDD文件。
val textFile= sc.textFile("file:///$SPARK_HOME/README.md")
3. 简单 RDD 操作
对于 RDD,可以执行 Transformation 返回新 RDD,也可以执行 Action 得到返回结果。
textFile.first()
textFile.count()
通过 Transformation 操作,使用 filter 命令返回一个新的 RDD ,即抽取文件全部条目的一个子集,返回一个新的 FilteredRDD 。
valtext Filter = textFile.filter(line >line.contains("Spark"))
textFile.filter(line =>line.contains("Spark")).count()
4. 简单 RDD 操作应用
通过简单 RDD 操作进行组合,来实现找出文本中每行最多单词数,词频统计等。
找出文本中每行最多单词数
textFile.map(line =>line.split(" ").size).reduce((a, b) => if (a > b) a else b)
词频统计
从 MapReduce 开始,词频统计已经成为大数据处理最流行的入门程序.
val wordCount= textFile.flatMap(line =>line.split(" ")).map(word => (word,1)).
wordCount.collect()
如果想让函数文本更简洁,可以使用占位符“_”,占位符可以看作表达式里需要被“填入”的“空白”。
Spark默认是不进行排序的。
5. RDD缓存
Spark也支持将数据集存进一个集群的内存缓存中。
textFilter.cache()
textFilter.count()
通过cache缓存数据可以用于非常大的数据集,支持跨越几十或几百个节点。
构建Spark的开发环境
构建Spark开发环境的思路,基于Eclipse或Idea,通过Java、Scala或Python语言进行开发。
1. 准备环境
1.安装JDK
2.安装Python
3.构建Spark的IntelliJ IDEA开发环境
2. 独立应用程序编程
1 创建SparkContext对象
2 编写简单应用程序
3 编译并提交应用程序
对于Python应用,在<application-jar>的位置传入一个.py文件代替一个Jar包,并且以-py-files的方式在搜索路径下加入Python.zip、.egg或.py文件。