介紹
在處理和使用大數據時, Apache Spark是使用最廣泛的框架之一,而 Python是用於數據分析,機器學習等的最廣泛使用的編程語言之一。那麼,為什麼不一起使用它們呢?這就是 Spark with Python(也稱為 PySpark)出現的地方。
由於Python有著豐富的庫集,當今大多數數據科學家和分析專家都在使用Python 。Spark是用Scala語言開發的,它與Java非常相似。它將程序代碼編譯為JVM的字節碼,以進行大數據處理。為了使用Python支持Spark,Apache Spark社區發佈了PySpark。兩個方面的優點結合在一起帶來工作效率的提升。 在這個文章中,我將討論以下內容:
- Apache Spark簡介及其功能
- 為什麼要使用Python?
- 使用Python設置Spark(PySpark)
- PySpark SparkContext和數據流
- PySpark RDD用例
Apache Spark簡介
Apache Spark是由Apache Software Foundation開發的用於實時處理的開源集群計算框架。Spark提供了一個接口,用於使用隱式數據並行性和容錯性對整個集群進行編程。
以下是Apache Spark的一些功能,這些功能使其比其他框架更具優勢:
- 速度:它比傳統的大規模數據處理框架快100倍。
- 強大的緩存:簡單的編程層提供了強大的緩存和磁盤持久性功能。
- 部署: 可以通過Mesos,通過Yarn的Hadoop或Spark自己的集群管理器進行部署。
- 實時: 實時計算和低延遲(由於內存計算)。
- 多種語言:它是此框架的最重要功能之一,因為可以用Scala,Java,Python和R進行編程。
為什麼要使用Python?
儘管Spark是在scala中設計的,這使其速度比Python快10倍,但是Scala僅在使用的內核數較少時才更快。由於當今大多數分析和過程都需要大量內核,因此Scala的性能優勢並不那麼多。
對於程序員而言,由於其語法和標準庫,Python 相對容易 學習。而且,它是一種動態類型化的語言,這意味著RDD可以容納多種類型的對象。
儘管Scala具有SparkMLlib,但是它沒有足夠的庫和工具來滿足機器學習和NLP的目的。而且,Scala缺乏數據可視化。
使用Python設置Spark(PySpark)
假定您已經知道如何下載spark並安裝它。因此,一旦您解壓縮了spark文件,將其安裝並添加到.bashrc文件的路徑,則需要輸入source .bashrc
要打開pyspark shell,您需要輸入以下命令 ./bin/pyspark
PySpark SparkContext和數據流
Py4j庫使用Python與Spark交互來使用RDD。PySpark Shell將Python API鏈接到spark核心並初始化Spark Context。Spark上下文是任何Spark 應用程序的核心。
- Spark上下文設置內部服務並建立與Spark執行環境的連接。
- 驅動程序中的sparkcontext對象協調所有分佈式過程並允許資源分配。
- 集群管理器提供執行器,它們是具有邏輯的JVM進程。
- SparkContext對象將應用程序發送給執行者。
- SparkContext在每個執行程序中執行任務。
PySpark RDD用例
現在,讓我們看一下RDD 的用例。在這裡,我們使用一個數據集examples.csv作為範例
創建RDD:
現在我們可以使用該文件來創建RDD。
data_file = "./data/examples.csv"
raw_data = sc.textFile(data_file)
過濾(filter):
假設我們要計算多少正常。我們在數據集中的互動。我們可以如下過濾 raw_data RDD。
計數(count):
現在,我們可以統計有多少元素在新RDD。
normal_raw_data.count()
輸出:
map:
在這種情況下,我們希望以CSV格式讀取數據文件。我們可以通過對RDD中的每個元素應用lambda函數來做到這一點,如下所示。在這裡,我們將使用
map()和take()轉換。split_file = normal_raw_data.map(lambda line: line.split(","))
輸出:
[[u'10', u'上海', u'17', u'A2', u'M'],
[u'11', u'上海', u'14', u'B2', u'M']]
collect:
在這裡,我們將使用collect()動作。它將把RDD的所有元素都存儲到內存中。因此,在處理大型RDD時必須謹慎使用。
split_file.collect()
輸出:
[[u'10', u'上海', u'17', u'A2', u'M'],
[u'11', u'上海', u'14', u'B2', u'M']]
當然,這花費的時間比我們之前使用的任何其他操作更長。每個具有RDD片段的Spark工作者節點都必須進行協調,以便檢索其組成部分,然後一起縮減所有內容。
如果發現任何不正確的地方,或者想分享有關上述主題的更多信息,歡迎反饋。
閱讀更多 數據大視界 的文章