Spark期末总结

目录

1.RDD 常用转换算子

1、map算子

2、filter算子

3、flatMap算子

5、distinct算子

6、dsortBy算子

2、RDD 常用转换算子

1、collect行动算子

2、count行动算子

3、reduce行动算子


1.RDD 介绍
        RDD(Resilient Distributed Dataset)叫做弹性分布式数据集,是 Spark 中最基本的数据处理模型。代码中是一个抽象类,它代表一个弹性的、不可变、可分区、里面的元素可并行计算的集合,RDD算子分为转换(Transformation)算子和行动( Action)算子,程序运行到转换算子时并不会马上执行转算子,只有碰到行动算子才会真正执行转换算子。

2.RDD 创建
        创建RDD一般有三种方式:
通过集合创建RDD:使用SparkContext.parallelize方法将集合转成RDD。
通过文件创建RDD:使用SparkContext.textFile方法读取文件内容创建RDD,文件可以是本地文件,也可以是hdfs文件。
 通过其他RDD创建RDD,RDD的内容是不可变的,通过RDD算子操作之后会生产新的RDD。

4.创建RDD

5、从外部文件创建 RDD

val rdd = sc.textFile("file.txt")

1.RDD 常用转换算子
1、map算子

 map算子:对输入的每一元素进行处理,生成一对一的结果,有多少条数据进入,就有多少数据出来。

2、filter算子

根据给定的函数过滤 RDD 中的元素,并返回一个包含满足条件的元素的新 RDD。

3、flatMap算子

类似于 map,但是对每个输入元素生成多个输出元素(返回一个扁平化的结果)。

4、mapPartitions算子
类似于 map,但是作用于 RDD 的每个分区而不是每个元素,可以减少开销。

5、distinct算子

去除 RDD 中的重复元素,并返回一个包含唯一元素的新 RDD。

6、dsortBy算子

根据给定的比较函数对 RDD 中的元素进行排序。

2、RDD 常用转换算子
1、collect行动算子

将 RDD 中的所有元素收集到驱动程序节点上,并以数组的形式返回。

2、count行动算子

返回 RDD 中元素的数量

val hf_count = hf_rdd.count()

3、reduce行动算子

通过一个函数将 RDD 中的元素两两结合,直到将所有元素归约为一个结果。

4、take行动算子

二、SparDataFrame入门
DataFrame是一个二维表结构,那么表格结构就有无法绕开的三个点:



表结构描述
在MySQL中的一张表:

由许多行组成
数据也被分成多个列
表也有表结构信息(列、列名、列类型、列约束等)
基于这个前提,DataFrame的组成如下:

在结构层面:

StructType对象描述整个DataFrame的表结构
StructField对象描述一个列的信息
在数据层面

Row对象记录一行数据
Column对象记录一列数据并包含列的信息

二、SparDataFrame入门
DataFrame是一个二维表结构,那么表格结构就有无法绕开的三个点:



表结构描述
在MySQL中的一张表:

由许多行组成
数据也被分成多个列
表也有表结构信息(列、列名、列类型、列约束等)
基于这个前提,DataFrame的组成如下:

在结构层面:

StructType对象描述整个DataFrame的表结构
StructField对象描述一个列的信息
在数据层面

Row对象记录一行数据
Column对象记录一列数据并包含列的信息

创建RDD

package com.tipdm.sparkDemo
import org.apache.spark.{SparkConf, SparkContext}
object a1 {
  def main(args: Array[String]): Unit = {
    val conf = new SparkConf().setAppName("WordCount").setMaster("local")
    val sc = new SparkContext(conf)
    val rdd1 = sc.parallelize(List(('a',1),('b',99),('c',100),('d',101)))
    val rdd2 = sc.parallelize(List(('e',120),('f',150)))
    val rdd3 = rdd1.union(rdd2)
    rdd3.filter(_._2 >= 100).collect
    rdd3.filter(x => x._2 >= 100).collect.foreach(println)
    val rdd4 = sc.parallelize(List(('a',1),('b',99),('c',100),('d',101),('c',100)))
    rdd4.filter(_._2 >= 100).collect
    val rdd5 = rdd4.distinct()
    rdd5.filter(x => x._2 >= 100).collect.foreach(println)
  }
}

创建rdd1与rdd2,用union()方法合并rdd1与rdd2放在rdd3中

对rdd3进行filter()方法过滤,去除100以下的数据

创建rdd4,先用filter()方法过滤去除100以下的数据,再用distinct()方法去重输出

object a2 {
  def main(args: Array[String]): Unit = {
    val conf = new SparkConf().setAppName("WordCount").setMaster("local")
    val sc = new SparkContext(conf)
    val rdd1 = sc.parallelize(List(1,2,3))
    val rdd2 = sc.parallelize(List(3,4,5,6))
    val rdd3 = sc.parallelize(List('a','b','c'))
    val rdd4 = rdd1.union(rdd2)
    val rdd5 = rdd4.filter(_ >= 3)
    val rdd6 = rdd5.distinct()
    rdd6.cartesian(rdd3).collect.foreach(println)
  }
}
创建rdd1与rdd2,用union()方法合并rdd1与rdd2放在rdd4中

创建rdd5,用filter()方法过滤去除3以下的数据

创建rdd6,先用distinct()方法去再用cartesian()方法输出笛卡尔积

2、从外部数据源创建 DataFrame

3、显示 DataFrame 的内容

过滤行

分组聚合

添加和删除列

使用 SQL 查询

在本文中,我们探讨了 Spark 中两个重要的数据抽象:Spark RDD 和 Spark DataFrame。Spark RDD 是最初引入的分布式数据集概念,它提供了对数据的低级别控制和操作。它适用于需要对数据进行精细控制的情况,例如复杂的数据处理和算法实现。

与此相比,Spark DataFrame 是在 Spark SQL 中引入的,它提供了更高级别、更方便的 API,使得数据处理更加直观和简单。它更适用于结构化数据和 SQL 操作,以及大规模数据的数据处理和分析。

选择使用哪种数据结构取决于具体的需求和情况。如果你需要对数据进行更复杂的转换和操作,并且对数据的结构不是很了解,那么 Spark DataFrame 可能更适合你。而如果你需要对数据进行更底层的控制,并且更关注性能和灵活性,那么 Spark RDD 可能是更好的选择。

无论你选择使用哪种数据结构,Spark 提供了强大而灵活的工具来处理大规模数据。通过深入了解 Spark RDD 和 Spark DataFrame,你可以更有效地处理和分析数据,并从中获得有价值的见解和洞察。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值