spark core 入门实战之二(RDD的练习)

有以下几种方式创建RDD

#常用Transformation(即转换,延迟加载)

#通过并行化scala集合创建RDD
val rdd1 = sc.parallelize(Array(1,2,3,4,5,6,7,8))
#查看该rdd的分区数量
rdd1.partitions.length


val rdd1 = sc.parallelize(List(5,6,4,7,3,8,2,9,1,10))
val rdd2 = sc.parallelize(List(5,6,4,7,3,8,2,9,1,10)).map(_*2).sortBy(x=>x,true)
val rdd3 = rdd2.filter(_>10)
val rdd2 = sc.parallelize(List(5,6,4,7,3,8,2,9,1,10)).map(_*2).sortBy(x=>x+"",true)
val rdd2 = sc.parallelize(List(5,6,4,7,3,8,2,9,1,10)).map(_*2).sortBy(x=>x.toString,true)


val rdd4 = sc.parallelize(Array("a b c", "d e f", "h i j"))
rdd4.flatMap(_.split(' ')).collect


val rdd5 = sc.parallelize(List(List("a b c", "a b b"),List("e f g", "a f g"), List("h i j", "a a b")))

List("a b c", "a b b") =List("a","b",))


rdd5.flatMap(_.flatMap(_.split(" "))).collect


#union求并集,注意类型要一致
val rdd6 = sc.parallelize(List(5,6,4,7))
val rdd7 = sc.parallelize(List(1,2,3,4))
val rdd8 = rdd6.union(rdd7)
rdd8.distinct.sortBy(x=>x).collect


#intersection求交集
val rdd9 = rdd6.intersection(rdd7)




val rdd1 = sc.parallelize(List(("tom", 1), ("jerry", 2), ("kitty", 3)))
val rdd2 = sc.parallelize(List(("jerry", 9), ("tom", 8), ("shuke", 7)))


#join
val rdd3 = rdd1.join(rdd2)
val rdd3 = rdd1.leftOuterJoin(rdd2) //左外
val rdd3 = rdd1.rightOuterJoin(rdd2) //右外




#groupByKey
val rdd3 = rdd1 union rdd2
rdd3.groupByKey
rdd3.groupByKey.map(x=>(x._1,x._2.sum)) //mapValues 是spark的用法。还有reduceByKey
groupByKey.mapValues(_.sum)

#WordCount, reduceByKey效率高,第二个效率低
sc.textFile("/root/words.txt").flatMap(x=>x.split(" ")).map((_,1)). reduceByKey(_+_).sortBy(_._2,false).collect
sc.textFile("/root/words.txt").flatMap(x=>x.split(" ")).map((_,1)).groupByKey.map(t=>(t._1, t._2.sum)).collect


#cogroup
val rdd1 = sc.parallelize(List(("tom", 1), ("tom", 2), ("jerry", 3), ("kitty", 2)))
val rdd2 = sc.parallelize(List(("jerry", 2), ("tom", 1), ("shuke", 2)))
val rdd3 = rdd1.cogroup(rdd2)
val rdd4 = rdd3.map(t=>(t._1, t._2._1.sum + t._2._2.sum))


#cartesian笛卡尔积
val rdd1 = sc.parallelize(List("tom", "jerry"))
val rdd2 = sc.parallelize(List("tom", "kitty", "shuke"))
val rdd3 = rdd1.cartesian(rdd2)


###################################################################################################


#spark action
val rdd1 = sc.parallelize(List(1,2,3,4,5), 2)


#collect
rdd1.collect


#reduce
val rdd2 = rdd1.reduce(_+_)


#count
rdd1.count //有多少个元素


#top
rdd1.top(2) //取前两个 ,排序取出最大的两个


#take
rdd1.take(2) //取前两个 ,不排序最大的两个


#first(similer to take(1))
rdd1.first   //相当于take(1)


#takeOrdered
rdd1.takeOrdered(3)   //定义自己的规则取前三



你可能感兴趣的:(spark)