Professional Documents
Culture Documents
创建 RDD 的方法
从集合创建
val lines = sc.parallelize(List("aa","bb"))
从文件创建
本地文件
val lines = sc.textFile("file:///home/hadoop/app/spark-1.6.1-bin-2.6.0-
cdh5.7.0/README.md")
HDFS
val lines = sc.textFile("hdfs://hadoop000:9000/afile")
RDD 支持两类操作
转化操作(transformation)和行动操作(action)
无论执行了多少次 transformation 操作,RDD 都不会真正执行运算,只有当 action 操作
被执行时,运算才会触发。
加载本地文件:
val input=sc.textFile("/home/hadoop/app/spark-1.6.1-bin-2.6.0-cdh5.7.0/README.md")
过滤 input 中包含 a 的行:
val input_a=input.filter(line=>line.contains("a"))
过滤 input 中包含 b 的行:
val input_b=input.filter(line=>line.contains("b"))
过滤 input_a 中包含 d 的行:
val input_d=input_a.filter(line=>line.contains("d"))
显示 input_a 中的第一行
input_a.first()
转化操作(transformation):
map()
flatMap()
first():返回第一个元素
filter():过滤
distinct():元素去重
union():输出两个 RDD 的所有元素,不去掉重复元素
intersection():输出两个 RDD 的相同元素,驱虫
subtract():返回包含在第一个 RDD 中但是不包含在第二个 RDD 中的元素,不去重
cartesian():返回两个元素的笛卡尔积
zip()
zip()操作
定义一个常量 words:
val words=sc.parallelize(List("kgc","kegongchang","spark","hello"))
取的常量 words 每行的长度:
客服邮箱:ke@kgc.cn 1/3
北京课工场教育科技有限公司
val words_length=words.map(_.length).collect()
结果为:Array[Int] = Array(3, 11, 5, 5)
对两个 RDD 进行并行遍历
words.zip(words_length).collect()
结果为 Array[(String, Int)] = Array((kgc,3), (kegongchang,11), (spark,5), (hello,5))
生成一个 1 到 4 的 RDD num1
val num1=sc.parallelize(1 to 4 ,2)
对 num1 进行 flatMap 操作生成 num2
val num2=num1.flatMap(x=>1 to x)
num2.collect()的结果为 Array[Int] = Array(1, 1, 2, 1, 2, 3, 1, 2, 3, 4)
map()和 flatMap()操作
定义 lines
val lines=sc.parallelize(List("hello spark","kegongchang"))
对 lines 进行 flatMap 操作
lines.flatMap(line=>line.split(" ")).collect()
结果为 Array[String] = Array(hello, spark, kegongchang)
对 lines 进行 map 操作
lines.map(line=>line.split(" ")).collect()
结果为 Array[Array[String]] = Array(Array(hello, spark), Array(kegongchang))
Map 处理完成生成一个元素,而 flatmap 可以生成多个元素构建新的 RDD
union()、intersection()、subtract()、cartesian()操作
val num1=sc.parallelize(List("aa","bb","cc","cc"),2)
Num1.collect()的结果为 Array[String] = Array(aa, bb, cc, cc)
val num2=sc.parallelize(List("cc","dd"),2)
num2.collect()的结果为 Array[String] = Array(cc, dd)
num1.union(num2).collect()
结果为 Array[String] = Array(aa, bb, cc, cc, cc, dd)
num1.intersection(num2).collect()
结果为 Array[String] = Array(cc)
num1.subtract(num2).collect()
结果为 Array[String] = Array(aa, bb)
num1.cartesian(num2).collect()
结 果 为 Array[(String, String)] = Array((aa,cc), (bb,cc), (aa,dd), (bb,dd), (cc,cc), (cc,cc),
(cc,dd), (cc,dd))
行动操作(action):
collect():返回全部元素
take():返回指定数量的元素
foreach():应用方法到每一个元素
count():统计元素总量
客服邮箱:ke@kgc.cn 2/3
北京课工场教育科技有限公司
countByValue():统计每一个元素的数量,返回一对键值对
reduce():对每个元素进行逐个合并
lines.take(3).foreach(println)的结果为:
# Apache Spark
Spark is a fast and general cluster computing system for Big Data. It provides
lines.count()的结果为 Long = 95
客服邮箱:ke@kgc.cn 3/3