在學習 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
查詢。
from pyspark.sql import SparkSessionspark = 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
無縫集成。
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模式
。不同的模式適用于不同的應用場景和集群配置。