热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

开发笔记:spark学习四

篇首语:本文由编程笔记#小编为大家整理,主要介绍了spark学习四相关的知识,希望对你有一定的参考价值。5.sc.textFiles()与sc

篇首语:本文由编程笔记#小编为大家整理,主要介绍了spark学习四相关的知识,希望对你有一定的参考价值。




5.sc.textFiles() 与 sc.wholeTextFiles() 的区别


sc.textFile()是将path 里的所有文件内容读出,以文件中的每一行作为一条记录的方式,文件的每一行 相当于 列表 的一个元素,因此可以在每个partition中用for i in data的形式遍历处理数据。

sc.wholeTextFiles()返回的是[(key, val), (key, val)...]的形式,其中key是文件路径,val是文件内容,每个文件作为一个记录!这说明这里的 val 将不再是 list 的方式为你将文件每行拆成一个 list的元素,
而是将整个文本的内容以字符串的形式读进来,也就是说val = ‘...line1...
...line2...

这时需要你自己去拆分每行!而如果你还是用for i in val的形式来便利 val那么i得到的将是每个字符。

6.filter方法过滤集合中的元素


首先你需要给filter方法一个判断条件或者返回true/false的函数,这个判断条件(函数)的输入类型要与集合元素类型一致,
返回值是布尔型的。filter方法会对集合的每一个元素调用判断条件,当条件为true的时候则元素进入新的集合否则会被过滤掉。
你还需要使用一个变量来指向新的集合
过滤偶数:
val x=List.range(1,10)
x:List[Int]=List(1,2,3,4,5,6,7,8,9)
val evens =x.filter(_%2==0)
evens:List[Int]=List(2,4,6,8)

val evens=x.filterNot(_%2==0)
evens:List[Int]=List(1,3,5,7,9)

filter方法可以便利整个集合,但是其他方法只是遍历一部分元素
filter方法允许提供一个判断条件(函数),过滤集合元素
当判断逻辑复杂时,没办法一行写完,可以在filter内部使用多行的判断逻辑,也可以定义一个判断函数,filter(panduan)
也可以连续使用filter方法
io.Source.formFile(canFilename)
.toList
.filter(_.trim !="")
.filter(_.charAt(0) !=‘#‘)

7.mapValues(func)


功能:对键值对每个value都应用一个函数,但是,key不会发生变化。

val list = List("hadoop","spark","hive","spark")
val rdd = sc.parallelize(list)
val pairRdd = rdd.map(x => (x,1))
pairRdd.mapValues(_+1).collect.foreach(println)//对每个value进行+1
结果
(hadoop,2)
(spark,2)
(hive,2)
(spark,2)

 

 

完成了实验四RDD编程初级实践

2.编写独立应用程序实现数据去重
对于两个输入文件 A 和 B,编写 Spark 独立应用程序,对两个文件进行合并,并剔除其 中重复的内容,得到一个新文件 C。下面是输入文件和输出文件的一个样例,供参考。


import org.apache.spark.SparkContext
import org.apache.spark.SparkContext._
import org.apache.spark.SparkConf
object exercise{
def main(args: Array[String]) {
val cOnf= new SparkConf().setAppName("RemDup")
val sc = new SparkContext(conf)
val dataFile1 = "file:///usr/local/spark/mycode/exercise42/text1.txt,file:///usr/local/spark/mycode/exercise42/text2.txt"

val data = sc.textFile(dataFile1,2)
val da = data.distinct()
da.foreach(println)
}
}

  技术图片

3.编写独立应用程序实现求平均值问题
每个输入文件表示班级学生某个学科的成绩,每行内容由两个字段组成,第一个是学生 名字,第二个是学生的成绩;编写 Spark 独立应用程序求出所有学生的平均成绩,并输出到 一个新文件中。下面是输入文件和输出文件的一个样例,供参考


import org.apache.spark.SparkContext
import org.apache.spark.SparkContext._
import org.apache.spark.SparkConf
object wordcount{
def main(args:Array[String]){
val inputfile="file:///usr/local/spark/mycode/exercise43/data.txt"
val cOnf=new SparkConf().setAppName("WordCount").setMaster("local[2]")
val sc=new SparkContext(conf)
val textFile=sc.textFile(inputfile)
val wordCount=textFile.map(line=>(line.split(" ")(0),line.split(" ")(1).toInt)).mapValues(x=>(x,1)).reduceByKey((x,y)=>(x._1+y._1,x._2+y._2)).mapValues(x=>(x._1/x._2)).collect().foreach(println)
}
}

  技术图片

 



推荐阅读
author-avatar
欧阳羽昌53
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有