Scala in Spark 基本操作【未完】

本文介绍了Apache Spark中使用Scala进行大数据分析的基础操作,包括如何使用collect或materialize获取RDD数据,缓存RDD以及从内存中删除RDD。讨论了RDD的创建、groupByKey和缓存策略,提供了一个学习Spark和Scala集合操作的起点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

[Apache Spark大数据分析入门(一)(http://www.youkuaiyun.com/article/2015-11-25/2826324)

spark 笔记 5: SparkContext,SparkConf

spark读取hbase

Scala 强大的集合数据操作示例

spark中的一些RDD操作以及变换

# 创建textFileRDD
val textFile = sc.textFile("README.md")
textFile.first()  #获取textFile RDD的第一个元素
res3:String = # Apache Spark

# 筛选出包括Spark关键字的RDD然后进行行计数
val  linesWithSpark = textFile.filter(line => line.contains("Spark"))
linesWithSpark.count()
res10:Long = 19

# 找出RDD textFile中包含单词数最多的行
textFile.map(line=>line.split(" ").size).reduce((a,b)=>Math.max(a,b))
res12:Int = 14  #第14行是包含单词最多的行

# 在scala shell中引入Java方法:
import java.lang.Math
textFile.map(line=>line.split(" ").size).reduce((a,b) => Math.max(a,b))

#将RDD linesWithSpark 缓存,然后进行计数
linesWithSpark.cache()
res13:linesWithSpark.type = 
MapPartitionsRDD[8] at filter at <console>:23
linesWithSpark.count()
res15:Long = 19

RDD:
makeRDD 和 parallelize是一样的,不过makeRDD好像只能scala用,parallelize是Python和 R都能用的

# 通过单词列表集合创建RDD thingsRDD
val thingsRDD = sc.parallelize(List("spoon","fork","plate","cup","bottle"))

# 计算RDD thingsRDD中单词的个数
thingsRDD.count()
res16:Long = 5

groupByKey( )转换操作
这里写图片描述

pairRDD.groupByKey()
#得到:
Banana [Yellow]
Apple  [Red, Green]
Kiwi   [Green]
FIgs   [Black]

collect 或 materialize linesWithSpark RDD中的数据

collect方法返回计算好的数值。??

linesWithSpark.collect()

缓存RDD linesWithSpark

linesWithSpark.cache()

将linesWithSpark从内存中删除

linesWithSpark,unpersist()

RDD的部分转换操作:

转换操作作用
filter()过滤
map()将一个RDD中的每个数据项,通过map中的函数映射为一个新的元素,返回集合对象
flatMap()先map,再将所有的输出分区合并成一个。
distinct()对RDD中的元素进行去重操作
coalesce()将RDD进行重新分区,使用HashPartitioner
repartition()coalesce函数第二个参数为true的实现
sample()
union()将2个RDD合并,不去重
intersection()返回两个RDD的交集,并且去重
subtract类似intersection,返回在RDD中出现,并且不在otherRDD中出现的元素,不去重。
mapPartitions与map类似,按分区进行映射
mapPartitionsWithIndex同mapPartitions,多提供了2个参数
zip用于将两个RDD组合成Key/Value形式的RDD,这里默认两个RDD的partition数量以及元素数量都相同,否则会抛出异常。
zipPartitions将多个RDD按照partition组合成为新的RDD,该函数需要组合的RDD具有相同的分区数,但对于每个分区的元素数量没有要求
partitionBy
mapValues
flatMapValues
combineByKey
foldByKey
groupByKey()
reduceByKey()
reduceByKeyLocally
randomSplit()根据weights权重,将一个RDD切分成多个RDD

Action操作说明
first
count
reduce
collect
take
top
takeOrdered
aggregate
fold
lookup
countByKey
foreach
foreachPartition
sortBy
saveAsTextFile
saveAsSequenceFile
saveAsObjectFile
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值