目录
一.行动算子和转换算子
二.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(