下面代码中,wordToOne是RDD类型,调用了reduceByKey方法,但是reduceByKey是PairRDD类型的方法,那不属于一个类型,为什么可以调用呢? 或者说RDD类中不存在reduceByKey方法
原因是RDD类中有隐式转换,将RDD通过隐式转换是的可以使用PairRDD的方法
package com.aiyunxiao.test01
import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext}
object test {
def main(args: Array[String]): Unit = {
//TODO 创建spark配置对象
val conf: SparkConf = new SparkConf().setAppName("wordcount").setMaster("local[*]")
// TODO 创建spark环境连接对象
val sc = new SparkContext(conf)
//TODO 从classpath中查找文件(配置文件,XML文件)
// 当前环境的类加载器中,去获取资源来作为流来使用
// Thread.currentThread().getContextClassLoader.getResourceAsStream()
// TODO 从项目环境中获取
val line: RDD[String] = sc.textFile("input")
val word: RDD[String] = line.flatMap(line=>line.split(" "))
val wordToOne: RDD[(String, Int)] = word.map(word=>(word,1))
val wordToCount: RDD[(String, Int)] = wordToOne.reduceByKey((x,y)=>(x+y))
val result: Array[(String, Int)] = wordToCount.collect()
result.foreach(println)
sc.stop()
}
}