spark-day01-快速上手

1:spark是什么

Spark是一种基于内存的快速、通用、可扩展的大数据分析计算引擎。

2:spark和Hadoop的区别-使用场景

        Hadoop:一次性数据计算,框架在处理数据的时候,会从存储设备中读取数据,进行逻辑操作,然后将处理的结果重新存储到介质中。

spark:spark和Hadoop的根本差异是多个作业之间的数据通信问题:spark多个作业之间数据通信是基于内存,而Hadoop是基于磁盘的

3:spark核心模块

spark core:spark最基础与最核心的功能

spark sql:spark用来操作结构化数据的组件

spark streaming:spark平台上针对实时数据进行流式计算的组件

spark mllib:机器学习的算法库

spark graphx:面向图计算提供的框架与算法库

4:word count案例的两种实现方式----常用第二种

package com.atguigu.bigdata.spark.wc

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

object Spark01_WordCount {
  def main(args: Array[String]): Unit = {
    //application
    //spark框架
    //建立和spark的连接,本地环境
    val sparConf = new SparkConf().setMaster("local").setAppName("WordCount")
    val sc = new SparkContext(sparConf);
    //执行业务操作
    //1.读取文件,获取一行一行的数据  "hello world"
    val lines:RDD[String] = sc.textFile("datas");
    //2.将一行数据进行拆分,形成一个一个的单词 "hello word"=>hello,word
    val words:RDD[String] = lines.flatMap(_.split(" "));
    //3.将数据根据单词进行分组,便于统计 (hello,hello,hello)(world,world)
    val wordGroup:RDD[(String,Iterable[String])] = words.groupBy(word=>word);
    //4.对分组的数据进行转换  (hello,3) (world,2)
    val wordToCount = wordGroup.map{
      case (word,list) => {
        (word,list.size)
      }
    }
    //5.采集输出控制台
    val array:Array[(String,Int)] = wordToCount.collect()
    array.foreach(println)
    //关闭连接
    sc.stop();
  }
}

package com.atguigu.bigdata.spark.wc

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

object Spark02_WordCount {
  def main(args: Array[String]): Unit = {
    //application
    //spark框架
    //建立和spark的连接,本地环境
    val sparConf = new SparkConf().setMaster("local").setAppName("WordCount")
    val sc = new SparkContext(sparConf);
    //执行业务操作
    //1.读取文件,获取一行一行的数据  "hello world"
    val lines:RDD[String] = sc.textFile("datas");
    //2.将一行数据进行拆分,形成一个一个的单词 "hello word"=>hello,word
    val words:RDD[String] = lines.flatMap(_.split(" "));

    //3.分为每个单词之后,都标记为1
    val wordToOne = words.map{
      word => (word,1)
    }
    //4.将数据根据单词进行分组,便于统计 (hello,hello,hello)(world,world)
    val groupRDD:RDD[(String,Iterable[(String,Int)])] = wordToOne.groupBy(
      t => t._1
    )
    //5.对分组的数据进行转换  (hello,3) (world,2)
    val wordToCount = groupRDD.map{
      case (word,list) => {
        list.reduce(
          (t1, t2) => {
            (t1._1, t1._2 + t2._2)
          }
        )
      }
    }
    //6.采集输出控制台
    val array:Array[(String,Int)] = wordToCount.collect()
    array.foreach(println)
    //关闭连接
    sc.stop();
  }
}

 5:使用spark函数,实现word count

package com.atguigu.bigdata.spark.wc

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

object Spark03_WordCount {
  def main(args: Array[String]): Unit = {
    //application
    //spark框架
    //建立和spark的连接,本地环境
    val sparConf = new SparkConf().setMaster("local").setAppName("WordCount")
    val sc = new SparkContext(sparConf);
    //执行业务操作
    //1.读取文件,获取一行一行的数据  "hello world"
    val lines:RDD[String] = sc.textFile("datas");
    //2.将一行数据进行拆分,形成一个一个的单词 "hello word"=>hello,word
    val words:RDD[String] = lines.flatMap(_.split(" "));

    //3.分为每个单词之后,都标记为1
    val wordToOne = words.map{
      word => (word,1)
    }

    //spark框架提供了更多的功能,可以将分组和聚合使用一个方法实现
    //相同的key的数据,可以对value进行reduce聚合
    val wordToCount = wordToOne.reduceByKey((x,y) => {x+y})

    val array:Array[(String,Int)] = wordToCount.collect()
    array.foreach(println)
    //关闭连接
    sc.stop();
  }
}

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

总会有天明

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值