RDD五大特性

package com.shujia.core

import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext}

object Demo01WordCount {
  def main(args: Array[String]): Unit = {
    //初始化Spark环境

    //创建Spark配置对象
    val conf: SparkConf = new SparkConf()
    //配置任务的名称
    conf.setAppName("Demo01WordCount")
    //配置Spark的运行方式 local表示本地运行
    conf.setMaster("local")

    //1、创建Spark上下文对象 即Spark的入口
    val sc: SparkContext = new SparkContext(conf)

    //2、读取文件 将文件构建成RDD
    /**
     * RDD:弹性分布式数据集
     * “暂时”可以将其理解为Scala中的一个集合,使用起来类似List
     * 实际上RDD是Spark中提供的一个编程模型
     *
     * Spark并没有自己的读文件的方式 使用的还是MR的切片、格式化数据的方式 是基于TextInputFormat类
     */
    val linesRDD: RDD[String] = sc.textFile("Spark/data/wordCnt/input")

    //3、对每行数据进行切分 并对切分后的结果进行扁平化处理
    //flatMap等其他跟RDD相关的方法在Spark中统称为“算子”
    val wordsRDD: RDD[String] = linesRDD.flatMap(line => line.split(","))

    //4、按照单词进行分组
    /**
     * Iterable迭代器跟List区别?
     * 1、迭代器只能被遍历
     * 2、迭代器的数据不在内存中 当使用时才会逐条加载到内存里
     */
    val groupRDD: RDD[(String, Iterable[String])] = wordsRDD.groupBy(word => word)

    //5、统计每个单词的数量 并整理最后输出的结果
    val wordCntRDD: RDD[String] = groupRDD.map(kv => s"${kv._1}, ${kv._2.size}")

    //6、打印或保存最后的结果
//    wordCntRDD.foreach(println)
    wordCntRDD.saveAsTextFile("Spark/data/wordCnt/output")

    //防止Spark程序停止 WebUI会销毁
    while(true){

    }
  }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值