Spark RDD练习

题目:已知:list1 = [“My name is Peter”, “How are you”] 

1.计算list1中各个元素的长度

scala> val rdd1=sc.parallelize(List("My name is Peter", "How are you"))
rdd1: org.apache.spark.rdd.RDD[String] = ParallelCollectionRDD[0] at parallelize at <console>:24

scala> rdd1.map(_.length).collect
res0: Array[Int] = Array(16, 11)

        解释:

         第一行代码使用Spark的RDD(弹性分布式数据集)创建了一个名为rdd1的分布式数据集。它包含了两个字符串元素:"My name is Peter"和"How are you",sc.parallelize()是Spark中的一个函数,用于将一个已有的集合(如列表或数组)转换为一个分布式数据集(RDD)

        第二行代码中rdd1是一个RDD对象,map是RDD的一个转换操作,它将RDD中的每个元素应用于给定的函数。在这种情况下,_.length表示对每个元素调用length方法,以获取元素的长度。接下来,collect是RDD的一个动作操作,它将RDD中的所有元素收集到驱动程序中,并以数组的形式返回结果。这段代码的意思是对RDD中的每个元素获取其长度,并将结果以数组的形式返回。

        所以返回结果Array(16, 11)分别表示 My name is Peter, How are you的长度。

2.计算list1中各个元素中各个单词的长度。

scala> rdd1.flatMap(line=>line.split(" ")).map(_.length).foreach(println)
2
4
2
5
3
3
3

        解释:

        这段代码的执行过程如下:

  1. 对rdd1中的每个元素(即每一行)进行flatMap操作,将每行按照空格进行切分,得到一个单词列表。
  2. 对切分后的单词列表进行map操作,将每个单词转换为它的长度
  3. 对转换后的长度进行foreach操作,将每个长度打印出来

3.计算list1中各个元素中各个单词的长度,并输出对应单词。

scala> rdd1.flatMap(line=>line.split(" ")).map(word=>(word,word.length)).collect().foreach(println)
(My,2)
(name,4)
(is,2)
(Peter,5)
(How,3)
(are,3)
(you,3)

        解释

        与上一题类似,不同的地方是用了map(word=>(word,word.length))对一个包含单词的集合进行映射操作,将每个单词和它的长度作为一个键值对返回。

使用RDD编写词频统计

        word内容如图

#读取文本并创建RDD
scala> val lines = sc.textFile("data/word.txt")

#对每一行进行单词拆分,并创建包含所有单词的RDD
scala> val words = lines.flatMap(line=>line.split(" "))

# 对每个单词计数为1,并创建包含(word, 1)键值对的RDD
scala> val word_counts = words.map(word=>(word, 1))

# 对相同单词的计数进行累加
scala> val word_frequency = word_counts.reduceByKey(_+_)

#打印词频统计结果
scala> word_frequency.collect()

运行结果:

 

已知:numList = [[1, 3], [2, 4], [3, 5], [4, 6]] ,请编程输出: [[1, 30], [2, 40], [3, 50], [4, 60]]

        代码如下:

scala> val rdd1 = sc.parallelize(List((1, 3), (2, 4), (3, 5), (4, 6)))

scala> rdd1.map(x => (x._1, x._2*10)).collect()

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值