spark-day01-快速上手

spark-day01-快速上手,第1张

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();
  }
}

 

 

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5709607.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存