给一段代码,说明spark中transformation与action的关系
时间: 2024-09-29 20:14:42 浏览: 34
大数据技术分享 Spark技术讲座 哪个数据破坏了我的代码检查Spark变换 共25页.pdf
在Spark中,`Transformation` 和 `Action` 是两个核心概念,它们之间的关系是这样的:
**Transformation (转换)**:它是一个无副作用的操作,意味着它不会改变原始数据集,而是创建一个新的数据集。例如,`map()`、`filter()`、`reduceByKey()`、`join()` 等都是Transformation例子。在 Spark 缓存机制下,一旦进行了 Transformation,数据会被存储在内存或磁盘上,以便后续复用。
**Action (动作)**:当你调用 Action 函数时,如 `collect()`、`count()`、`write()` 或 `save()`,会触发 Spark 对数据的实际处理。Action 会产生一些可见的结果,并且每次运行都会导致整个任务图从头开始执行,除非该任务已经缓存在内存中。Action 通常是数据处理流程的终点,用于查看、验证或持久化数据结果。
在编写Spark程序时,通常会有多个Transformation,形成一个任务链(DAG,Directed Acyclic Graph),直到最后一个Action才会真正启动数据的计算。这样做可以有效地复用中间结果,避免重复工作,并尽可能利用集群资源。
示例代码:
```python
rdd = sc.textFile("input.txt") // 创建一个RDD (Resilient Distributed Dataset)
filtered_rdd = rdd.filter(lambda x: "example" in x) // Transformation
transformed_count = filtered_rdd.count() // Action: 获取过滤后字符串的数量
# 这里,`filtered_rdd` 是一个 Transformation,而 `transformed_count` 是一个 Action。只有当 `transformed_count` 被求值时,整个任务才会被执行。
```
阅读全文