Spark结课文章

目录

一.行动算子和转换算子

二.scala函数组合器

map()方法

foreach()方法

filter()方法

flatten()方法

faltMap()方法

groupBY()方法

三.Spark

创建rdd的三种方式:

parallelize()

makeRDD()

sc.textFile()

map()方法 

sortBY()方法

collect()方法

flatMap()方法

take()方法

union()方法

filter()方法

distinct()方法

三.使用简单的集合操作

(1)intersection()方法

(2)subtract()方法

(3)cartesian()方法

第四章Spark SQL

二.DataFrame概述



一.行动算子和转换算子

二.scala函数组合器

map()方法

map()方法通过一个函数重新计算列表中所有函数,任何返回一个新列表

foreach()方法

foreach()方法对函数结果进行输出

filter()方法

filter()方法可以过滤不需要的值,返回需要的值

flatten()方法

flatten()方法可以将嵌套结构展开

faltMap()方法

faltMap()结合了map与flatten可以处理一个嵌套列表,在对结果进行连接

groupBY()方法

groupBY()方法可以元素进行分组,返回一个映射

三.Spark

创建rdd的三种方式:

parallelize()

makeRDD()

sc.textFile()

map()方法 

map()方法转换数据,map()是懒方法不会立即计算。

sortBY()方法

sortBy()排序方法,可输入三个参数

第一个参数:必须输入,f:(T)=>k,左边为对象元素,右边返回排序后的值

第二个参数:可选,决定是否升序,默认为true

第三个参数:可选,决定RDD分区个数,默认值不变

collect()方法

collect()方法查看RDD(因为是在idea中所以加了foreach,在集群环境中无需foreach)

flatMap()方法

flatMap()方法将函数参数应用于RDD之中的每一个元素,将返回的迭代器(如数组、列表等)中的所有元素构成新的RDD。

        使用flatMap()方法时先进行map(映射)再进行flat(扁平化)操作,数据会先经过跟map一样的操作,为每一条输入返回一个迭代器(可迭代的数据类型),然后将所得到的不同级别的迭代器中的元素全部当成同级别的元素,返回一个元素级别全部相同的RDD。这个转换操作通常用来切分单词。

        例如,分别用 maPO方法和 AatapO方法分制字符串。用 mapO方法分削后,每个元素对应返回一个迷代器,即数组。fatNapO方法在进行同 mapO方法一样的操作后,将3个选代器的元素扁平化(压成同一级别),保存在新 RDD 中,代码如下

take()方法

查询某几个值

take(N)方法用于获取RDD的前N个元素,返回数据为数组。take()与collect()方法的原理相似,collect()方法用于获取全部数据,take()方法获取指定个数的数据。获取RDD的前5个元素,代码如下。

union()方法

合并多个RDD

union()方法是一种转换操作,用于将两个RDD合并成一个,不进行去重操作,而且两个RDD中每个元素中的值的个数、数据类型需要保持一致。代码如下

filter()方法

进行过滤
filter()方法是一种转换操作,用于过滤RDD中的元素。

filter()方法需要一个参数,这个参数是一个用于过滤的函数,该函数的返回值为Boolean类型。

filter()方法将返回值为true的元素保留,将返回值为false的元素过滤掉,最后返回一个存储符合过滤条件的所有元素的新RDD。

创建一个RDD,并且过滤掉每个元组第二个值小于等于1的元素。代码如下

distinct()方法

进行去重
        distinct()方法是一种转换操作,用于RDD的数据去重,去除两个完全相同的元素,没有参数。创建一个带有重复数据的RDD,并使用distinct()方法去重。代码如下

三.使用简单的集合操作

(1)intersection()方法

intersection()方法用于求出两个RDD的共同元素,即找出两个RDD的交集,参数是另一个RDD,先后顺序与结果无关。创建两个RDD,其中有相同的元素,通过intersection()方法求出两个RDD的交集

(2)subtract()方法

subtract()方法用于将前一个RDD中在后一个RDD出现的元素删除,可以认为是求补集的操作,返回值为前一个RDD去除与后一个RDD相同元素后的剩余值所组成的新的RDD。两个RDD的顺序会影响结果。创建两个RDD,分别为rdd1和rdd2,包含相同元素和不同元素,通过subtract()方法求rdd1和rdd2彼此的补集。

(3)cartesian()方法

cartesian()方法可将两个集合的元素两两组合成一组,即求笛卡儿积。创建两个RDD,分别有4个元素,通过cartesian()方法求两个RDD的笛卡儿积。

任务实现

第四章Spark SQL

一.Spark SQL的简介
Spark SQL主要提供了以下三个功能:

1.Spark SQL可从各种结构化数据源中读取数据,进行数据分析。

2.Spark SQL包含行业标准的JDBC和ODBC连接方式,因此它不局限于在Spark程序内使用SQL语句进行查询。

3.Spark SQL可以无缝地将SQL查询与Spark程序进行结合,它能够将结构化数据作为Spark中的分布式数据集(RDD)进行查询。

二.DataFrame概述

1.DataFrame简介

 2.DataFrame的创建

我们通过Spark读取数据源的方式进行创建DataFrame

3.RDD直接转换为DataFrame

在Scala语言中使用Spark SQL进行操作时,通常会用到DataFrame API。以下是一个简单的例子,展示如何使用Scala语言结合Spark SQL创建DataFrame并执行SQL查询:

首先,确保你已经有了一个SparkSession实例,这是与Spark交互的主要入口点。

import org.apache.spark.sql.{Row, SparkSession}
 
import org.apache.spark.sql.types._
 
// 初始化SparkSession
 
val spark = SparkSession.builder()
 
  .appName("Spark SQL example")
 
  .getOrCreate()
 
import spark.implicits._
然后,定义一个schema来描述你的数据。例如,如果你有一个包含姓名、年龄和薪资的表,你可以这样定义schema:

val schema = StructType(Array(
 
  StructField("name", StringType),
 
  StructField("age", IntegerType),
 
  StructField("salary", DoubleType)
 
))
接下来,创建一个DataFrame。你可以手动创建Row实例,也可以从CSV文件或其他数据源加载数据:

// 手动创建Row实例
 
val rows = Array(
 
  Row("Alice", 30, 80000.0),
 
  Row("Bob", 25, 70000.0),
 
  Row("Charlie", 35, 95000.0)
 
)
 
// 创建DataFrame
 
val df = spark.createDataFrame(spark.sparkContext.parallelize(rows), schema)
 
现在你可以使用SQL来查询DataFrame了:
 
// 注册DataFrame为临时视图
 
df.createOrReplaceTempView("employees")
 
// 执行SQL查询
 
val results = spark.sql("SELECT * FROM employees WHERE age > 30")
 
// 显示查询结果
 
results.show()
 
//最后,不要忘记在结束时停止SparkSession:
 
 
 
spark.stop(

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值