RDD(python

RDD创建

从文件系统加载

.textFile()

  • 支持本地文件系统
  • 分布式文件系统HDFS
  • 云端文件
>>lines = sc.textFile("file:///usr/local/spark/mycode/rdd/word.txt")
>>lines.foreach(print)
Hadoop is good
Spark is fast
Spark is better

sc : spark context

textFile效果
在这里插入图片描述
分布式文件系统
在这里插入图片描述

通过并行集合(数组)创建RDD

.Parallelize()

>>>array = [1,2,3,4,5]
>>>rdd = sc.parallelize(array)
>>>rdd.foreach(print)
1
2
3
4
5

在这里插入图片描述

RDD操作

转换:并不会发生正在的计算,只是记录下这个操作,最后再输出。

  • filter
  • map
  • flatMap
    在这里插入图片描述
    针对spark 的一次次转换操作
    - filter:筛选
>>>lines = sc.textFile("file:///usr/local/spark/mycode/rdd/word.txt")
>>>linesWithSpark = lines.fliter(lambda line : "Spark" in line)//判断"spark"在不在里面
>>>linesWithSpark.foreach(print)
Spark is better
spark is fast

在这里插入图片描述
- map:一一对应

>>>data = [1,2,3,4,5]
>>>rdd1 = sc.parallelize(data)
>>>rdd2 = rdd1.map(lambda x:x+10)
>>>rdd2.foreach(print)
11
12
13
14
15

在这里插入图片描述

>>>lines = sc.textFile("file:///usr/local/spark/mycode/rdd/word.txt")
>>>words = lines.map(lambda line:line.split(" "))//分拆
>>>words.foreach(print)
['Hadoop','is','good']
['spark','is','fast']
['spark','is','better']

在这里插入图片描述

  • flatMap : 得到每个单词(词频统计)
>>>lines = sc.textFile("file:///usr/local/spark/mycode/rdd/word.txt")
>>>words = lines.flatMap(lambda line:line.split(" "))

在这里插入图片描述

  • groupByKey:相同值的元素归到一起
    在这里插入图片描述
    在这里插入图片描述

  • reduceByKey
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    动作:

  • count:返回元素个数

  • collect:以数组形式返回所有元素

  • first:返回第一个元素

  • take(n):以数组形式返回前n个元素

  • reduce(func):通过函数func(输入两个参数返回一个值)聚合数据集中的元素

  • foreach(func):将每个元素传到func中
    在这里插入图片描述

持久化:用persist()方法标记一个RDD为持久化,保存在内存中方便重复使用
在这里插入图片描述

  • MEMORY_ONLY = cache:内存不足,替换内容
  • MEMORY_AND_DISK:内存不足,存放磁盘

unpersist:从缓存中移除持久化的RDD
在这里插入图片描述
分区

  • 增加并行度
  • 减少通信开销

分区原则
在这里插入图片描述
设置分区
在这里插入图片描述

>>>list = [1,2,3,4,5]
>>>rdd = sc.parallelize(list,2)//设置两个分区

repartition重新设置分区个数

>>>data = sc.parallelize([1,2,3,4,5],2)
>>>len(data.glom().collect())//显示分区数量
>>>rdd = data.repartition(1)//对data这个RDD重新分区
>>>len(rdd.glom().collect())//显示分区数量

自定义分区
在这里插入图片描述

from pyspark import SparkConf,SparkContext

//分区函数
def MyPartitioner(key):
print("MyPartitoner is running")
print('The key is %d'%key)
return key%10

def main():
print("main is running")
conf = SparkCaonf().setMaster("local`").set AppName("MyApp")
sc = SparkContext(conf = conf)
data = sc.paeallelize(range()10,5)
data.map(lambda x:(x,1)).partitionBy(10.MyPartitioner)//只接受键值对类型.map(lambda x:x[0])//取出数值.saveAsTextFile(".../rdd/partitioner")

if__name__ == '__main__':
	main()

在这里插入图片描述
在这里插入图片描述

键值对RDD(pair RDD)

生成
在这里插入图片描述
通过并行集合生成

加粗样式

键值对RDD转换

  • reduceByKey(func)
  • groupByKey()
    在这里插入图片描述
  • keys:把键值对RDD中的key返回成一个新的RDD
    在这里插入图片描述
  • values:取出value返回成RDD
  • sortByKey:根据key排序(默认升序,true)
    在这里插入图片描述
    sortBy:可根据具体的值进行排序
  • mapValues(func)
    在这里插入图片描述
  • join:内连接
    在这里插入图片描述
    在这里插入图片描述
    综合实例:key——图书名称,value——销量,计算每种图书每天的平均销量
    在这里插入图片描述
  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值