Spark4:RDD实例

请添加图片描述

一、词频统计实例

在这里插入图片描述

读文件
在这里插入图片描述
拍扁
在这里插入图片描述

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

二、键值对RDD

1.创建键值对RDD

①加载数据

scala> val lines =sc.textFile("hdfs://localhost:9000/user/hadoop/word.txt")
scala>val pairRDD = lines.flatMap(line=>line.split(" ")).map(word=>(word,1))

②并行数据

val list=List("Hadoop","Spark","Hive","Spark")
val rdd=sc.parallelize(list)
val pairRDD = rdd.map(word => (word,1))

2.键值对RDD转换操作

①reduceByKey(func)

使用func函数合并具有相同键的值

pairRDD.reduceByKey((a,b)=>a+b).foreach(println)

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

②groupByKey()

对具有相同键的值进行分组
在这里插入图片描述

pairRDD.groupByKey()

在这里插入图片描述

两者的区别

groupByKey只做分组,
(key,value-list)不会进行汇总求和;

而reduceByKey更进一步,
value-list进行汇总求和。

实例
在这里插入图片描述

③map

将RDD中每一个元素依次取出遍历

val wordCountsWithGroup = wordPairsRDD.groupByKey().map(t=>(t._1,t._2.sum))

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

④keys

把Pair RDD中的key返回形成一个新的RDD

pairRDD.keys
pairRDD,keys.foreach(println)

在这里插入图片描述

⑤values

把Pair RDD中的value返回形成一个新的RDD
用法和上面的一样

⑥sortByKey

返回一个根据键排序的RDD
默认是升序
在这里插入图片描述

在这里插入图片描述

⑦mapValues(func)

对键值对RDD中的每个value都应用一个函数,key不会发生变化。

在这里插入图片描述

⑧join

连接RDD中key相同的元素
在这里插入图片描述

在这里插入图片描述

实例

求月均销量

rdd,mapValues(x=>(x,1)).
reduceByKey((x,y)=>(x._1+y._1,x._2+y._2)).
mapValues(x=>(x._1/x._2)).
collect()

在这里插入图片描述

三、RDD数据读写

惰性机制,即使输入错误的语句也不会马上报错
写文件
textFile.saveAsTextFile(“目录”)
读文件
val textFile=sc.textFile(“目录”)

json字符串
在这里插入图片描述
在这里插入图片描述

四、文件排序

在这里插入图片描述

import org.apache.spark.SparkContext
import org.apache.spark.SparkContext._
import org.apache.spark.SparkConf
import org.apache.spark.HashPartitioner
object FileSort {
  def main(args: Array[String]{
    val conf = new SparkConf().setAppName("FileSort")
    val sc = new SparkContext(conf)
    val dataFile = "file:///usr/local/spark/mycode/rdd/data"
    val lines = sc.textFile(dataFile,3)
    var index = 0
    val result = lines.filter(_.trim(.length>0).map(n=>(n.trim.toInt,"")).partitionBy(newHashPartitioner(1)).sortByKeyo.map(t =>{
         index += 1
       (index,t._1)
     })
     result.saveAsTextFile("file:///usr/local/spark/mycode/rdd/examples/result")
   }
}

val lines = sc.textFile(dataFile,3)
在这里插入图片描述
val result = lines.filter(_.trim(.length>0)
过滤没有内容的行

.map(n=>(n.trim.toInt,“”))
在这里插入图片描述
partitionBy(newHashPartitioner(1))
把所有分区相关数据组成新的分区

在这里插入图片描述
.map(t =>{
index += 1
(index,t._1)
})
在这里插入图片描述
result.saveAsTextFile(“file:///usr/local/spark/mycode/rdd/examples/result”)
在这里插入图片描述

完善

Spark 4: RDD实例

一、词频统计实例

以下是一个词频统计的Spark RDD实例,它演示了如何使用Spark来统计文本中单词的频率。

from pyspark import SparkContext

# 创建SparkContext
sc = SparkContext("local", "Word Count Example")

# 从文本文件加载数据创建RDD
text_rdd = sc.textFile("file:///path/to/your/textfile.txt")

# 切分文本并计算词频
word_counts = text_rdd.flatMap(lambda line: line.split(" ")).map(lambda word: (word, 1)).reduceByKey(lambda a, b: a + b)

# 打印词频结果
print(word_counts.collect())

二、键值对RDD

1. 创建键值对RDD

你可以使用map操作将普通RDD转换为键值对RDD,如下所示:

rdd = sc.parallelize([(1, "apple"), (2, "banana"), (3, "cherry")])
key_value_rdd = rdd.map(lambda x: (x[0], x[1]))

2. 键值对RDD转换操作

a. reduceByKey(func)

reduceByKey操作用于按键对值进行归约操作。它将具有相同键的值进行合并,以减少数据量。

key_value_rdd = sc.parallelize([(1, 2), (2, 3), (1, 4), (2, 5)])
result = key_value_rdd.reduceByKey(lambda a, b: a + b)
b. groupByKey()

groupByKey操作用于按键对值进行分组。它返回一个键和值的列表,其中每个键都对应一个值的迭代器。

key_value_rdd = sc.parallelize([(1, "apple"), (2, "banana"), (1, "cherry")])
result = key_value_rdd.groupByKey()
两者的区别
  • reduceByKey会在每个键的值上执行归约操作,并返回每个键的单个值。
  • groupByKey返回每个键的值的迭代器,可能包含多个值。
c. map

map操作用于对键值对RDD的每个元素应用一个函数。

key_value_rdd = sc.parallelize([(1, "apple"), (2, "banana"), (1, "cherry")])
result = key_value_rdd.map(lambda x: (x[0], x[1].upper()))
d. keys

keys操作返回键的RDD。

key_value_rdd = sc.parallelize([(1, "apple"), (2, "banana"), (1, "cherry")])
keys_rdd = key_value_rdd.keys()
e. values

values操作返回值的RDD。

key_value_rdd = sc.parallelize([(1, "apple"), (2, "banana"), (1, "cherry")])
values_rdd = key_value_rdd.values()
f. sortByKey

sortByKey操作按键对RDD中的键进行排序。

key_value_rdd = sc.parallelize([(3, "apple"), (1, "banana"), (2, "cherry")])
sorted_rdd = key_value_rdd.sortByKey()
g. mapValues(func)

mapValues操作对键值对RDD的值应用函数。

key_value_rdd = sc.parallelize([(1, "apple"), (2, "banana"), (3, "cherry")])
result = key_value_rdd.mapValues(lambda x: x.upper())
h. join

join操作用于合并两个键值对RDD,基于它们的键进行合并。

rdd1 = sc.parallelize([(1, "apple"), (2, "banana"), (3, "cherry")])
rdd2 = sc.parallelize([(2, "red"), (3, "yellow"), (4, "green")])
result = rdd1.join(rdd2)

三、RDD数据读写

Spark支持从各种数据源中读取数据创建RDD,包括本地文件系统、HDFS、数据库、Kafka等。你可以使用textFilesequenceFilejdbc等方法来加载数据。

四、文件排序

Spark提供了sortBy操作,可以对RDD中的数据进行排序。你可以指定排序的字段和排序顺序。

rdd = sc.parallelize([3, 1, 2, 4, 5])
sorted_rdd = rdd.sortBy(lambda x: x, ascending=False)

这些是关于RDD的一些实例和操作,Spark的RDD提供了强大的数据处理功能,可以用于各种分布式计算任务。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

是Yu欸

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值