这篇博客是记录自己开启大数据学习之旅的开端,这是自己从来没有踏入过的领域,之前都是在利用java做一些小系统,增删改查,或者利用Java做一些APP,不过经过一位老师的指导,自己开始慢慢的接触大数据。都说万事开头难,的确,我在搭建Spark单机环境的时候,遇到了各种各样的错误,从昨天下午到现在,我终于搞好了,中间甚至有了挫败感,但是最终还是搭建好了,回头看来,都是小错误,自己没有细心。
大数据的课程还是推荐厦门大学林子雨的,我就是一点点开始学的。Spark的概述和框架就不说了,因为牵涉到具体的原理,我也不太懂,现在我的目标就是抓紧学会RDD编程,然后来处理GeoLife数据集,
这篇文章分为4个部分:
一、加载数据的方式
二、转换操作
三、执行操作
四、案例:统计词频
一、数据加载方式
RDD的执行过程就是读取外部数据源,经过一系列的转化形成新的RDD,最后利用动作性的指令计算,并输出到外部数据源
RDD的加载方式有两种:
一是从文件系统中加载数据,具体如下,将文件中每一行看做成一个RDD对象
data = sc.textFile("")
参数可以是本地文件 远程文件 分布式数据库文件
二是通过并行集合加载文件,将并行集合中的每一个元素看做成RDD对象
data = sc.parallelize()
二、转换操作
import findspark
findspark.init()
from pyspark import SparkContext,SparkConf
conf = SparkConf().setMaster("local").setAppName("first_demo")
sc = SparkContext().getOrCreate(conf)
data = sc.textFile("word.txt")
#filter操作
data1 = data.filter(lambda line : len(line)>3)
data1.foreach(print)
#map操作
data2 = data.map(lambda line:line.split(" "))
data2.foreach(print)
#flatMap操作
data3 = data.flatMap(lambda line:line.split(" "))
data3.foreach(print)
#groupBy操作
data4 = data3.map(lambda word:(word,1))
data4 = data4.groupByKey()
print(data4.collect())
#reduceByKey操作
data5 = data4.reduceByKey(lambda a,b:a+b)
print(data5.collect())
三、动作操作
import findspark
findspark.init()
from pyspark import SparkContext,SparkConf
conf = SparkConf().setMaster("local").setAppName("first_demo")
sc = SparkContext().getOrCreate(conf)
data = sc.textFile("word.txt")
data1 = data.map(lambda line:line.split(" "))
print(data1.count())
print(data1.collect())
print(data1.first())
print(data1.take(2))
data1.foreach(print)
四、案例:统计词频
学过上面的一些具体函数,这个还是非常简单的
import findspark
findspark.init()
from pyspark import SparkContext,SparkConf
conf = SparkConf().setMaster("local").setAppName("first_demo")
sc = SparkContext().getOrCreate(conf)
#本地文件路径
logFile = "word.txt"
#生成RDD对象
logdata = sc.textFile(logFile).cache()
#词频统计
#生成一个一个的单词RDD对象
wordCount = logdata.flatMap(lambda line: line.split(" "))
wordCount.foreach(print)
#把每个单词进行(word,1)形式的转换
wordCount1 = wordCount.map(lambda word:(word,1))
wordCount1.foreach(print)
#利用reduceByKey函数进行计数 对groupByKey后的结果列表进行lambda表达式的操作
wordCount2 = wordCount1.reduceByKey(lambda a,b:a+b)
wordCount2.foreach(print)
#将产生的结果转化成列表进行输出
print(wordCount2.collect())
最终的结果就是上面的,学了最基本的函数,感觉还行,不是很难,还没有遇到非常复杂的需求。明天接着学,争取在周日之前完成Geolife数据集的处理。