目录
scala基础
1.map方法
可通过一个函数重新计算列表中的所有元素,并且返回一个包含相同数目元素的新列表。
2.foreach()方法
foreach()方法和 map()方法类似,但是foreach()方法没有返回值,只用于对参数的失进行输出。
3.filter()方法
使用 filter()方法可以移除传入函数的返回值为 false 的元素。
4.flatten()方法
flatten()方法可以将嵌套的结构展开,即 flatten()方法可以将一个二維的列表展开成一个一维的列表。定义一个二维列表list,通过 flatten()方法可以将 list 展开为一维列表。
5.flatMap()方法
结合了map()方法和flatten()方法的功能,接收一个可以处理嵌套列表的函数,再对返回结果进行连接。
6.groupBy()方法
groupBy ()方法可对集合中的元素进行分组操作,返回的结果是一个映射。对 1~10根据奇偶性进行分组,因此 groupBy ()方法传入的参数是一个计算偶数的函数,得到的结果是一个映射,包含两个键值对,键为 false 对应的值为奇数列表,键为true对应的值为偶数列表
spar基础---RDD方法
1.map方法转换数据
是一种基础的RDD转换操作,可以对RDD中的每一个数据元素通过某种函数进行转换并返回新的RDD。
map()方法是转换操作,不会立即进行计算。
转换操作是创建RDD的第二种方法,通过转换已有RDD生成新的RDD。因为RDD是一个不可变的集合,所以如果对RDD数据进行了某种转换,那么会生成一个新的RDD。
2.sortby方法
用于对标准RDD进行排序,有3个可输入参数,说明如下。
•第1个参数是一个函数f:(T) => K,左边是要被排序对象中的每一个元素,右边返回的值是元素中要进行排序的值。
•第2个参数是ascending,决定排序后RDD中的元素是升序的还是降序的,默认是true,即升序排序,如果需要降序排序那么需要将参数的值设置为false。
•第3个参数是numPartitions,决定排序后的RDD的分区个数,默认排序后的分区个数和排序之前的分区个数相等,即this.partitions.size。
第一个参数是必须输入的,而后面的两个参数可以不输入。
3.collect方法查询
collect()方法是一种行动操作,可以将RDD中所有元素转换成数组并返回到Driver端,适用于返回处理后的少量数据。
因为需要从集群各个节点收集数据到本地,经过网络传输,并且加载到Driver内存中,所以如果数据量比较大,会给网络传输造成很大的压力。
因此,数据量较大时,尽量不使用collect()方法,否则可能导致Driver端出现内存溢出问题。
4.flatMap()方法转换数据
flatMap()方法将函数参数应用于RDD之中的每一个元素,将返回的迭代器(如数组、列表等)中的所有元素构成新的RDD。
使用flatMap()方法时先进行map(映射)再进行flat(扁平化)操作,数据会先经过跟map一样的操作,为每一条输入返回一个迭代器(可迭代的数据类型),然后将所得到的不同级别的迭代器中的元素全部当成同级别的元素,返回一个元素级别全部相同的RDD。
这个转换操作通常用来切分单词。
5.take(N)方法
用于获取RDD的前N个元素,返回数据为数组。
take()与collect()方法的原理相似,collect()方法用于获取全部数据,take()方法获取指定个数的数据。
获取RDD的前5个元素
6.使用union()方法合并多个RDD
union()方法是一种转换操作,用于将两个RDD合并成一个,不进行去重操作,而且两个RDD中每个元素中的值的个数、数据类型需要保持一致。
使用union()方法合并两个RDD
7.filter()方法进行过滤
filter()方法是一种转换操作,用于过滤RDD中的元素。
filter()方法需要一个参数,这个参数是一个用于过滤的函数,该函数的返回值为Boolean类型。
filter()方法将返回值为true的元素保留,将返回值为false的元素过滤掉,最后返回一个存储符合过滤条件的所有元素的新RDD。
8.使用distinct()方法进行去重
distinct()方法是一种转换操作,用于RDD的数据去重,去除两个完全相同的元素,没有参数。
创建一个带有重复数据的RDD,并使用distinct()方法去重。
9.intersection()方法
intersection()方法用于求出两个RDD的共同元素,即找出两个RDD的交集,参数是另一个RDD,先后顺序与结果无关。
10.subtract()方法
subtract()方法用于将前一个RDD中在后一个RDD出现的元素删除,可以认为是求补集的操作,返回值为前一个RDD去除与后一个RDD相同元素后的剩余值所组成的新的RDD。两个RDD的顺序会影响结果。
创建两个RDD,分别为rdd1和rdd2,包含相同元素和不同元素,通过subtract()方法求rdd1和rdd2彼此的补集。
11.cartesian()方法
cartesian()方法可将两个集合的元素两两组合成一组,即求笛卡儿积。
创建两个RDD,分别有4个元素,通过cartesian()方法求两个RDD的笛卡儿积。
三.DataFrame简介
1.DataFrame简介
DataFrame可以看作是分布式的Row对象的集合,在二维表数据集的每一列都带有名称和类型,这就是Schema元信息,这使得Spark框架可获取更多数据结构信息,从而对在DataFrame背后的数据源以及作用于DataFrame之上数据变换进行针对性的优化,最终达到提升计算效率。
2.查看及获取数据的常用函数或方法
方法 | 描述 |
printSchema | 打印数据模式 |
show | 查看数据 |
first/head/take/takeAsList | 获取若干行数据 |
collect/collectAsList | 获取所有数据 |
3.DataFrame的创建
在 Pandas 中,DataFrame 可以看做是一个二维的表格数据结构。我们可以通过多种方式来创建 DataFrame,以下是几种常见的方法:
- 从列表、字典、元组、NumPy 数组或 Pandas 的 Series 等数据类型创建 DataFrame。
- 从 CSV、Excel、SQL 数据库、JSON 等文件或数据源中读取数据创建 DataFrame。
- 手动创建一个空的 DataFrame,并逐行添加数据
import pandas as pd data = {'name': ['Alice', 'Bob', 'Charlie', 'David'], 'age': [25, 32, 18, 47], 'gender': ['F', 'M', 'M', 'M']} df = pd.DataFrame(data) print(df)
结果为
name age gender 0 Alice 25 F 1 Bob 32 M 2 Charlie 18 M 3 David 47 M
4.从文件或数据源中读取数据创建 DataFrame
在Python中,我们可以使用pandas库中的read_csv()函数从文件或数据源中读取数据创建DataFrame。 read_csv()函数默认将以逗号分隔的文件读入数据,但是您可以使用其他分隔符。此外,pandas还提供了许多其他用于读取各种文件格式的函数
import pandas as pd
from sqlalchemy import create_engine
# 创建一个到 SQL 数据库的引擎
engine = create_engine('sqlite:///example.db') # 示例为 SQLite 数据库
# 从 SQL 查询中读取数据
query = "SELECT * FROM table_name"
df = pd.read_sql(query, engine)
# 显示 DataFrame 的前几行
print(df.head())