package WorldCount
import org.apache.spark.{SparkConf, SparkContext}
object RddT {
//单词统计
def main(args: Array[String]): Unit = {
//权限被拒绝加下面代码
System.setProperty(“HADOOP_USER_NAME”, “root”)
// 实例化配置
val conf = new SparkConf()
// 指定 spark 任务名称
conf.setAppName(“Spark Pi”)
//指定 spark 任务的执行模式 有三种
conf.setMaster(“local”)
配置
val sc = new SparkContext(conf)
获取数据
val lines = sc.textFile("hdfs://192.168.0.101:8020/goods.txt")
//(0)只取下标是1的元素字符串模式 如果是数组类型的用flatmap扁平就好
val words = lines.map(_.split("\t")(0))
//为每个单词统计为1 (word,1) 是元组
// (13200,1)
// (10012,1)
// (10012,1)
// (10012,1)
val tulp = words.map((_,1))
// 进行汇聚 单词出现的次数一次加1 下面的位数是出现的次数
// (13200,1)
// (10012,3)
val re = tulp.reduceByKey(_ + _)
//将k和v调换位置,再将k降序排序"false"再调换k和v
val str1 = re.map(x => (x._2,x._1)).sortByKey(true ).map(x => (x._2,x._1))
//拼接成字符串\t为分隔
// 13200 1
// 10012 3
val str2 = str1.map(x => {x._1+"\t"+ x._2})
//如果不写hdfs://192.168.0.101:8020 会输出本地磁盘上面
str2.saveAsTextFile(“hdfs://192.168.0.101:8020/opt1/out/wce”)
}
}
下面的函数是指定分区