val conf = new SparkConf (). setAppName ( "Test" ). setMaster ( "local[*]" ) val sc = new SparkContext (conf) /* Action 算子 */ // 集合函数 val rdd1 = sc. parallelize (List( 2 , 1 , 3 , 6 , 5 ), 2 ) val rdd1_ 1 = rdd1. reduce (_+_) println (rdd1_ 1 ) // 以数组的形式返回数据集的所有元素 println (rdd1. collect (). toBuffer ) // 返回 RDD 的元素个数 println (rdd1. count ()) // 取出对应数量的值 默认降序 , 若输入 0 会返回一个空数组 println (rdd1. top ( 3 ). toBuffer ) // 顺序取出对应数量的值 println (rdd1. take ( 3 ). toBuffer ) // 顺序取出对应数量的值 默认生序 println (rdd1. takeOrdered ( 3 ). toBuffer ) // 获取第一个值 等价于 take(1) println (rdd1. first ()) // 将处理过后的数据写成文件 ( 存储在 HDFS 或本地文件系统 ) //rdd1.saveAsTextFile("dir/file1") // 统计 key 的个数并生成 map k 是 key 名 v 是 key 的个数 val rdd2 = sc. parallelize (List(( "key1" , 2 ),( "key2" , 1 ),( "key3" , 3 ),( "key4" , 6 ),( "key5" , 5 )), 2 ) val rdd2_ 1 : collection. Map [String, Long] = rdd2. countByKey () println (rdd2_ 1 ) // 遍历数据 rdd1. foreach (x => println (x)) /* 其他算子 */ // 统计 value 的个数 但是会将集合中的一个元素看做是一个 vluae val value: collection. Map [(String, Int), Long] = rdd2. countByValue println (value) //filterByRange: 对 RDD 中的元素进行过滤 , 返回指定范围内的数据 val rdd3 = sc. parallelize (List(( "e" , 5 ),( "c" , 3 ),( "d" , 4 ),( "c" , 2 ),( "a" , 1 ))) val rdd3_ 1 : RDD[(String, Int)] = rdd3. filterByRange ( "c" , "e" ) // 包括开始和结束的 println (rdd3_ 1. collect. toList ) //flatMapValues 对参数进行扁平化操作 , 是 value 的值 val rdd3_ 2 = sc. parallelize (List(( "a" , "1 2" ),( "b" , "3 4" ))) println ( rdd3_ 2.f latMapValues(_. split ( " " )). collect . toList ) //foreachPartition 循环的是分区数据 // foreachPartiton 一般应用于数据的持久化 , 存入数据库 , 可以进行分区的数据存储 val rdd4 = sc. parallelize (List( 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 ), 3 ) rdd4. foreachPartition (x => println (x. reduce (_+_))) //keyBy 以传入的函数返回值作为 key ,RDD 中的元素为 value 新的元组 val rdd5 = sc. parallelize (List( "dog" , "cat" , "pig" , "wolf" , "bee" ), 3 ) val rdd5_ 1 : RDD[(Int, String)] = rdd5. keyBy (_. length ) println (rdd5_ 1. collect. toList ) //keys 获取所有的 key values 获取所有的 values println (rdd5_ 1. keys. collect . toList ) println (rdd5_ 1. values. collect . toList ) //collectAsMap 将需要的二元组转换成 Map val map: collection. Map [String, Int] = rdd2. collectAsMap () println (map) |