1、将数组转化为RDD
val a = sc.parallelize(1 to 9) //可以用(1 to 9, 3)设置三个分区
a: org.apache.spark.rdd.RDD[Int] = ParallelCollectionRDD
a.collect
Array[Int] = Array(1, 2, 3, 4, 5, 6, 7, 8, 9)
2、从文件系统中的文件创建RDD(我这里用的是HDFS)
val a = sc.textFile("sparkApp/wordcount/input/score.txt")
a: org.apache.spark.rdd.RDD[String] = sparkApp/wordcount/input/score.txt MapPartitionsRDD
a.collect
Array[String] = Array(aa 78, bb 98, aa 80, cc 98, aa 69, cc 87, bb 97, cc 86, aa 97, bb 78, bb 34, cc 85, bb 92, cc 72, bb 33, bb 23)
map
map是对RDD中的每个元素都执行一个指定的函数来产生一个新的RDD。任何原RDD中的元素在新RDD中都有且只有一个元素与之对应。
val a = sc.parallelize(1 to 9)
val b = a.map(x => x * x)
b: org.apache.spark.rdd.RDD[Int] = MapPartitionsRDD
b.collect
Array[Int] = Array(1, 4, 9, 16, 25, 36, 49, 64, 81)
该实例将原RDD中的每一个元素进行平方来产生对应的新RDD
mapValues
输入函数应用于RDD中Kev-Value的Value,原RDD中的Key保持不变,与新的Value一起组成新的RDD中的元素。
因此,该函数只适用于元素为KV对的RDD。
val a = sc.parallelize(List("dog", "tiger", "lion", "cat", "panther", "eagle"))
val b = a.map(x => (x.length, x))
val c = b.mapValues("-----" + _ + "-----")
c.collect
Array[(Int, String)] = Array((3,-----dog-----), (5,-----tiger-----), (4,-----lion-----), (3,-----cat-----), (7,-----panther-----), (5,-----eagle-----))