在学习 PySpark
时会遇到很多新的关键词,理解这些概念,对我们学习PySpark
有极大的帮助,以下是一些PySpark
的关键概念及其详细解释:
1. PySpark
PySpark
是Apache Spark
的Python API。Spark
是一个用于大规模数据处理的开源分布式计算系统,支持内存计算和基于磁盘的数据处理,具有高性能和可扩展性。
2. SparkContext (SC)
SparkContext
是所有Spark
功能的入口点。它是Spark
应用的主控对象,用于连接到集群并创建RDD
(Resilient Distributed Datasets)。
3. Resilient Distributed Dataset (RDD)
RDD
是Spark
的核心抽象,是一个不可变的分布式数据集合。RDD支持两种操作:Transformations (如map
, filter
)和Actions (如count
, collect
)。
4. DataFrame
DataFrame
是Spark SQL
中的一个分布式数据集合,类似于Pandas
的DataFrame
。DataFrame
有更高层次的抽象,相比于RDD
提供了更多优化和更简单的API
。
5. Spark SQL
Spark SQL
是Spark
中处理结构化数据的组件,允许你使用SQL
查询DataFrame
和RDD
。它还支持从多种数据源读取数据,如JSON
、Parquet
、JDBC
等。
6. SparkSession
SparkSession
是用于与Spark
交互的新的入口点,它整合了SparkContext
、SQLContext
、HiveContext
的功能。你可以通过SparkSession
创建DataFrame
和执行SQL
查询。
python
from pyspark.sql import SparkSession
spark = SparkSession.builder \
.appName("example") \
.getOrCreate()
7. Transformations
Transformations
是对RDD
的惰性操作(lazy operations),即不会立即计算结果,而是生成一个新的RDD
。当需要执行一个Action
时,Spark
才会开始计算。常见的Transformations
包括:
map(func)
: 对RDD中的每个元素应用函数func
,并返回一个新的RDD
。filter(func)
: 保留RDD中使函数func
返回True
的元素,返回一个新的RDD
。flatMap(func)
: 类似于map
,但每个输入元素可以映射到0个或多个输出元素。
8. Actions
Actions
是对RDD
的操作,会触发计算并返回结果。常见的Actions
包括:
collect()
: 返回RDD中所有元素的列表。count()
: 返回RDD中元素的个数。first()
: 返回RDD中的第一个元素。
9. Lazy Evaluation
PySpark
使用惰性求值(Lazy Evaluation),即Transformations
不会立即执行,而是记录下需要进行的操作。当执行一个Action
时,Spark
会根据需要生成执行计划并优化执行。
10. Spark SQL and DataFrames
Spark SQL
支持通过SQL
语句查询数据,并且可以与DataFrame API
无缝集成。
python
df = spark.read.json("example.json")
df.createOrReplaceTempView("example")
result = spark.sql("SELECT * FROM example WHERE age > 21")
11. Spark Streaming
Spark Streaming
用于实时处理数据流,支持从多种数据源读取数据,如Kafka
、Flume
、Kinesis
等。它将实时数据流分成小批次进行处理,并提供类似于RDD
的API。
12. Machine Learning Library (MLlib)
MLlib
是Spark
的机器学习库,提供了多种机器学习算法和工具,如分类、回归、聚类、协同过滤等。
13. GraphX
GraphX
是Spark
的图计算库,提供了图算法和图操作的API,用于处理大规模图数据。
14. Spark的集群模式
Spark
支持多种集群模式,包括本地模式
、Standalone模式
、YARN模式
和Mesos模式
。不同的模式适用于不同的应用场景和集群配置。