spark常用算子(spark常用算子_spark map中的_1是啥意思)
## Spark 常用算子### 简介Spark 提供了丰富的算子来操作分布式数据集,这些算子可以大致分为 Transformation 和 Action 两类。
Transformation
:转换算子,这类算子接收一个RDD作为参数,经过计算后返回一个新的RDD,不会触发实际的计算。
Action
:动作算子,这类算子会触发 Spark 提交作业,并将计算结果返回给 Driver 程序或存储到外部存储系统。本文将详细介绍 Spark 中一些常用的 Transformation 和 Action 算子,并提供示例代码。### Transformation 算子#### 1. map(func)
作用:对 RDD 中的每个元素应用函数 func 进行转换,并返回一个新的 RDD。
示例:```python data = [1, 2, 3, 4, 5] rdd = sc.parallelize(data)# 将每个元素乘以 2 mapped_rdd = rdd.map(lambda x: x
2) print(mapped_rdd.collect()) # 输出 [2, 4, 6, 8, 10] ```#### 2. flatMap(func)
作用:与 map 类似,区别在于 func 的返回值是一个序列,flatMap 会将所有序列扁平化成一个 RDD。
示例:```python data = ["hello world", "spark is great"] rdd = sc.parallelize(data)# 将每个字符串分割成单词 flat_rdd = rdd.flatMap(lambda line: line.split(" ")) print(flat_rdd.collect()) # 输出 ['hello', 'world', 'spark', 'is', 'great'] ```#### 3. filter(func)
作用:过滤 RDD 中满足函数 func 条件的元素,并返回一个新的 RDD。
示例:```python data = [1, 2, 3, 4, 5] rdd = sc.parallelize(data)# 过滤出偶数 filtered_rdd = rdd.filter(lambda x: x % 2 == 0) print(filtered_rdd.collect()) # 输出 [2, 4] ```#### 4. distinct()
作用:对 RDD 中的元素进行去重,并返回一个新的 RDD。
示例:```python data = [1, 2, 2, 3, 4, 4, 5] rdd = sc.parallelize(data)# 去重 distinct_rdd = rdd.distinct() print(distinct_rdd.collect()) # 输出 [1, 2, 3, 4, 5] ```#### 5. reduceByKey(func)
作用:针对 key-value 类型的 RDD,按照 key 对 value 进行聚合操作。
示例:```python data = [("a", 1), ("b", 2), ("a", 3), ("b", 4)] rdd = sc.parallelize(data)# 按照 key 对 value 进行求和 reduced_rdd = rdd.reduceByKey(lambda x, y: x + y) print(reduced_rdd.collect()) # 输出 [('a', 4), ('b', 6)] ```#### 6. groupByKey()
作用:针对 key-value 类型的 RDD,按照 key 对 value 进行分组。
示例:```python
data = [("a", 1), ("b", 2), ("a", 3), ("b", 4)]
rdd = sc.parallelize(data)# 按照 key 对 value 进行分组
grouped_rdd = rdd.groupByKey()
print(grouped_rdd.collect()) # 输出 [('a',
作用:对 RDD 中的元素进行排序,keyfunc 用于指定排序的 key,ascending 指定升序或降序。
示例:```python data = [3, 1, 4, 2, 5] rdd = sc.parallelize(data)# 按照元素大小进行升序排序 sorted_rdd = rdd.sortBy(lambda x: x) print(sorted_rdd.collect()) # 输出 [1, 2, 3, 4, 5] ```### Action 算子#### 1. collect()
作用:将 RDD 中的所有元素收集到 Driver 程序中,并以列表的形式返回。
示例:```python data = [1, 2, 3, 4, 5] rdd = sc.parallelize(data)# 收集所有元素 result = rdd.collect() print(result) # 输出 [1, 2, 3, 4, 5] ```#### 2. count()
作用:统计 RDD 中元素的个数。
示例:```python data = [1, 2, 3, 4, 5] rdd = sc.parallelize(data)# 统计元素个数 count = rdd.count() print(count) # 输出 5 ```#### 3. take(n)
作用:从 RDD 中获取前 n 个元素。
示例:```python data = [1, 2, 3, 4, 5] rdd = sc.parallelize(data)# 获取前 3 个元素 first_3 = rdd.take(3) print(first_3) # 输出 [1, 2, 3] ```#### 4. first()
作用:返回 RDD 中的第一个元素。
示例:```python data = [1, 2, 3, 4, 5] rdd = sc.parallelize(data)# 获取第一个元素 first = rdd.first() print(first) # 输出 1 ```#### 5. reduce(func)
作用:使用函数 func 对 RDD 中的所有元素进行聚合操作。
示例:```python data = [1, 2, 3, 4, 5] rdd = sc.parallelize(data)# 对所有元素求和 sum = rdd.reduce(lambda x, y: x + y) print(sum) # 输出 15 ```### 总结本文介绍了 Spark 中常用的 Transformation 和 Action 算子,并提供了示例代码。熟练掌握这些算子可以帮助你更高效地进行数据处理。
Spark 常用算子
简介Spark 提供了丰富的算子来操作分布式数据集,这些算子可以大致分为 Transformation 和 Action 两类。* **Transformation**:转换算子,这类算子接收一个RDD作为参数,经过计算后返回一个新的RDD,不会触发实际的计算。 * **Action**:动作算子,这类算子会触发 Spark 提交作业,并将计算结果返回给 Driver 程序或存储到外部存储系统。本文将详细介绍 Spark 中一些常用的 Transformation 和 Action 算子,并提供示例代码。
Transformation 算子
1. map(func)* 作用:对 RDD 中的每个元素应用函数 func 进行转换,并返回一个新的 RDD。 * 示例:```python data = [1, 2, 3, 4, 5] rdd = sc.parallelize(data)
将每个元素乘以 2 mapped_rdd = rdd.map(lambda x: x * 2) print(mapped_rdd.collect())
输出 [2, 4, 6, 8, 10] ```
2. flatMap(func)* 作用:与 map 类似,区别在于 func 的返回值是一个序列,flatMap 会将所有序列扁平化成一个 RDD。 * 示例:```python data = ["hello world", "spark is great"] rdd = sc.parallelize(data)
将每个字符串分割成单词 flat_rdd = rdd.flatMap(lambda line: line.split(" ")) print(flat_rdd.collect())
输出 ['hello', 'world', 'spark', 'is', 'great'] ```
3. filter(func)* 作用:过滤 RDD 中满足函数 func 条件的元素,并返回一个新的 RDD。 * 示例:```python data = [1, 2, 3, 4, 5] rdd = sc.parallelize(data)
过滤出偶数 filtered_rdd = rdd.filter(lambda x: x % 2 == 0) print(filtered_rdd.collect())
输出 [2, 4] ```
4. distinct()* 作用:对 RDD 中的元素进行去重,并返回一个新的 RDD。 * 示例:```python data = [1, 2, 2, 3, 4, 4, 5] rdd = sc.parallelize(data)
去重 distinct_rdd = rdd.distinct() print(distinct_rdd.collect())
输出 [1, 2, 3, 4, 5] ```
5. reduceByKey(func)* 作用:针对 key-value 类型的 RDD,按照 key 对 value 进行聚合操作。 * 示例:```python data = [("a", 1), ("b", 2), ("a", 3), ("b", 4)] rdd = sc.parallelize(data)
按照 key 对 value 进行求和 reduced_rdd = rdd.reduceByKey(lambda x, y: x + y) print(reduced_rdd.collect())
输出 [('a', 4), ('b', 6)] ```
6. groupByKey()* 作用:针对 key-value 类型的 RDD,按照 key 对 value 进行分组。 * 示例:```python data = [("a", 1), ("b", 2), ("a", 3), ("b", 4)] rdd = sc.parallelize(data)
按照 key 对 value 进行分组 grouped_rdd = rdd.groupByKey() print(grouped_rdd.collect())
输出 [('a',
7. sortBy(keyfunc, ascending=True)* 作用:对 RDD 中的元素进行排序,keyfunc 用于指定排序的 key,ascending 指定升序或降序。 * 示例:```python data = [3, 1, 4, 2, 5] rdd = sc.parallelize(data)
按照元素大小进行升序排序 sorted_rdd = rdd.sortBy(lambda x: x) print(sorted_rdd.collect())
输出 [1, 2, 3, 4, 5] ```
Action 算子
1. collect()* 作用:将 RDD 中的所有元素收集到 Driver 程序中,并以列表的形式返回。 * 示例:```python data = [1, 2, 3, 4, 5] rdd = sc.parallelize(data)
收集所有元素 result = rdd.collect() print(result)
输出 [1, 2, 3, 4, 5] ```
2. count()* 作用:统计 RDD 中元素的个数。 * 示例:```python data = [1, 2, 3, 4, 5] rdd = sc.parallelize(data)
统计元素个数 count = rdd.count() print(count)
输出 5 ```
3. take(n)* 作用:从 RDD 中获取前 n 个元素。 * 示例:```python data = [1, 2, 3, 4, 5] rdd = sc.parallelize(data)
获取前 3 个元素 first_3 = rdd.take(3) print(first_3)
输出 [1, 2, 3] ```
4. first()* 作用:返回 RDD 中的第一个元素。 * 示例:```python data = [1, 2, 3, 4, 5] rdd = sc.parallelize(data)
获取第一个元素 first = rdd.first() print(first)
输出 1 ```
5. reduce(func)* 作用:使用函数 func 对 RDD 中的所有元素进行聚合操作。 * 示例:```python data = [1, 2, 3, 4, 5] rdd = sc.parallelize(data)
对所有元素求和 sum = rdd.reduce(lambda x, y: x + y) print(sum)
输出 15 ```
总结本文介绍了 Spark 中常用的 Transformation 和 Action 算子,并提供了示例代码。熟练掌握这些算子可以帮助你更高效地进行数据处理。