初学Spark

这篇博客是记录自己开启大数据学习之旅的开端,这是自己从来没有踏入过的领域,之前都是在利用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数据集的处理。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值