0


Spark追妻系列(Spark初了解)

感觉每天又有了希望,又有动力,感觉学习尽头十足

Spark是什么

  1. Spark是一个用来实现快速而通用的集群计算的平台。
  2. 在之前,学习了MR,学习了hadoop,用mapreduce来对数据进行处理,但是hadoop是用批处理的,而且还有延迟,况且,出来了HiveHivesql转化为mr算子。可以不用去写mr代码就可以对数据进行分析。
  3. Spark是集群计算,是在hadoop集群中进行的,Spark的一个主要特点就是能够在内存中进行计算,在内存中计算比在磁盘上运算要快很多,同时现在学习Spark的代价也很小了,大数据相关的软件都在慢慢实现SQL化,SPark,Flink 都支持SQL进行处理。

  1. Spark是一个软件的大集合,从上面的图中可以看到,在以Spark Core为基础和重点的基础上,增加了SQL,实时计算,机器学习,图计算。

Spark Core是什么

  1. spark core实现了spark的基本功能,包括任务调度,内存管理,错误恢复和存储系统交互等模块。

Spark SQL是什么

  1. SPark SQL是用Spark来操作结构化数据的程序包,通过Spark SQL可以使用Hive SQL来查询数据,同时Hive的默认引擎是mr,也可以换成Spark
  2. 同时呢,只介绍这两个,因为这两个将会在后面的博客出现几个月甚至一年。等实力够了再去学习其它的。

初识Spark

  1. 在博客中讲解的Spark都是基于windows本地的,不是在命令行上面sbt
  2. 关于spark的本地安装,可以去b站看看尚硅谷的Spark视频。

命令行和本地运行的差别

  1. 在本地运行时,可以在idea上写代码,但是需要自行初始化SparkContext
  2. 命令行提交之后就会出结果,本地运行直接在Idea中出结果

初始化SparkContext

  1. 想要在本地编写Spark Core代码,需要本地的Hadoop Spark环境。
  2. 导入Spark的包,创建SparkContext
  3. 先创建一个SparkConf对象来配置你的应用,然后基于这个SparkConf来创建SparkContext对象。
  4. val cf =new SparkConf().setMaster("local").setAppName("") val sc = new SparkContext(cf)

为什么要这样做呢?

  1. 集群url,告诉Spark如何连接集群,因为是本地集群,所以SetMaster的时候是local

  2. 为此次程序命名

    1. 初始化Spark Context后,就可以创建RDD来进行代码了。
    2. 关闭的时候 通过 sc.stop()就可以推出应用
    3. 通过RDD来实现W C

首先看一下数据源

  1. MapReduce中,word count就是第一个入门案例,在Spark里面,WordCount也是第一个入门案例。

代码实现

  1. val wordCount = new SparkConf().setMaster("local").setAppName("WordCount")
  2. val sparkContext = new SparkContext(wordCount)
  3. val value = sparkContext.textFile("date/1.txt")
  4. val value1 = value.flatMap(_.split(" "))
  5. val value2 = value1.groupBy(value1 => value1)
  6. val value3 = value2.map { case (word, list) => (word, list.size) } value3.collect().foreach(println(_)) s
  7. parkContext.stop()
  1. 上面就是用Scala代码来实现的WordCount

首先进行层层分析

  1. 创建SparkConf对象,对集群进行配置,创建SparkContext对象
  1. val wordCount = new SparkConf().setMaster("local").setAppName("WordCount")
  2. val sparkContext = new SparkContext(wordCount)

2.通过textFile来获取数据源

  1. val value = sparkContext.textFile("date/1.txt")

3.逻辑代码

  1. //flatMap函数,将数据根据空格分开
  2. val value1 = value.flatMap(_.split(" "))
  3. //groupBy分组,对每个单词进行分组
  4. val value2 = value1.groupBy(value1 => value1)
  5. //map + match进行匹配 value2的类型是(String,Iterable)
  6. val value3 = value2.map { case (word, list) => (word, list.size) }
  7. //如果匹配到老了,就转换类型
  8. (String,Iterable) => (String,Int)

RDD是什么

  1. RDD是弹性 分布式 数据集。
  2. Spark中,对数据的所有操作就是创建RDD,转化已有的RDD,调用RDD进行求值

如何创建RDD

两种方法创建RDD

  1. 读取一个外部数据集

  2. 在驱动程序里分发驱动程序中的对象集合

    1. 上面的例子中,通过读取外部文件来创建RDD
    2. 创建RDD过后,RDD支持两种操作,转换和动作。
    3. 转错操作就是各种算子,由一个RDD变成另外一个新的RDD。行动算子会对RDD计算出结果,并将结果返回控制台。
    4. 上面的例子中,flatMap,map,groupBy都是转换算子,foreach,collect等都是动作算子
    5. 虽然一个程序会有多个算子,但是Spark是惰性运算RDD的,只有在第一次用到的时候,这个RDD算子才会运作,还有一点先说一下,RDD算子并不存储数据,只是一个工具,数据都是在各个节点根据RDD进行运算的。
    6. 默认情况下,Spark中的RDD会在每次行动算子运算的时候会重新运算,如果想多个行动操作用一个RDD,那么可以RDD.persist()让SparkRDD进行缓存。也就是持久化。

总结:

  1. ** 先写一篇简短的文章,明天会输出篇幅比较大的文章。**
标签: spark big data hive

本文转载自: https://blog.csdn.net/weixin_46300771/article/details/122735947
版权归原作者 数仓白菜白 所有, 如有侵权,请联系我们删除。

“Spark追妻系列(Spark初了解)”的评论:

还没有评论