Spark的Python和Scala shell介紹(翻譯自Learning.Spark.Lightning-Fast.Big.Data.Analysis)

來源:互聯網
上載者:User

標籤:spark

Spark提供了互動式shell,互動式shell讓我們能夠點對點(原文:ad hoc)資料分析。如果你已經使用過R,Python,或者Scala中的shell,或者作業系統shell(例如bash),又或者Windows的命令提示字元介面,你將會對Spark的shell感到熟悉。

但實際上Spark shell與其它大部分shell都不一樣,其它大部分shell讓你通過單個機器上的磁碟或者記憶體操作資料,Spark shell讓你可以操作分布在很多機器上的磁碟或者記憶體裡的資料,而Spark負責在叢集上安排這些操作。

因為Spark可以將資料載入進工作節點的記憶體,所以,很多分散式運算,即使是那些處理分布在很多機器上、大小在TB級的資料,也能在幾秒之內運行完成。這讓Spark shell適合迭代、點對點和探索性分析。Spark提供Python和Scala shell,這些shell已經被增強來支援串連到叢集。

小提示
Spark只提供了Python和Scala shell。但是,因為一個shell對於學習API是非常有用的,我們建議你用這兩種語言之一來運行這些例子,即使你是一個Java開發人員。在每一個語言中,這些Api都是相似的。

展示Spark shell的強大最簡單的方式就是用它們來做簡單的資料分析。讓我們從官方文檔裡Quick Start Guide中的例子開始。

第一步是開啟一個shell。為了開啟Spark的Python版本(也被叫做PySpark),進入你的Spark目錄,然後輸入:
bin/pyspark
(在Windows裡輸入:bin\pyspark)
為了開啟shell的Scala版本,輸入:
bin/spark-shell
shell提示符應該會在幾秒內出現。當shell開始的時候,你將會看到大量的日誌資訊。你可能需要敲擊一下Enter鍵來清除日誌輸出和得到shell提示符。圖2-1展示了當你開啟PySpark時它的樣子的。

圖2-1


列印在shell裡的日誌資訊可能會讓你感到不爽。你可以讓日誌不輸出這麼多資訊。為了實現這個目標,你可以在conf目錄下建立一個叫做log4j.properties的檔案。在conf目錄下已經包含了這個檔案的一個模版,叫log4j.properties.template。為了讓日誌少些廢話,可以複製一份log4j.properties.template,改名為log4j.properties,然後在檔案裡找到這一行:
log4j.rootCategory=INFO, console
然後調低記錄層級,把它改為下面這個樣子:
log4j.rootCategory=WARN, console
這樣,我們就只會看到WARN和更進階別的日誌資訊了。

當你再次開啟shell,你看到的日誌輸出應該就少一些了,(圖2-2)。

圖2-2


使用IPython
IPython是一個增強版的Python shell,被許多Python使用者喜愛,它提供了像按tab鍵補全的功能。你可以在http://ipython.org找到安裝它的指令。你可以通過設定IPYTHON環境變數為1來使用帶Spark的IPython:
IPYTHON=1 ./bin/pyspark
為了使用IPython Notebook(IPython的基於web瀏覽器的版本),就用下面的命令:
IPYTHON_OPTS=“notebook” ./bin/pyspark
在Windows上,設定環境變數並運行shell,可以使用下面的命令:
set IPYTHON=1bin\pyspark
在Spark裡面,我們通過在分布式資料集上執行操作來表達我們的計算,這些操作會在叢集上並行地執行。這些分布式資料集叫做彈性分布式資料集,或者RDD。RDD是Spark對分布式資料和計算的基本抽象。

在我們講述更多關於RDD的內容之前,讓我們通過根據一個本地文字檔在shell中建立一個RDD,並在上面做一些非常簡單的點對點分析,具體操作在例2-1(Python)和例2-2(Scala)完成:

例2-1. Python統計文本行數

>>> lines = sc.textFile(“README.md”) #  建立一個叫lines的RDD

>>> lines.count() #  統計這個RDD中元素個數127

>>> lines.first() #  獲得這個RDD中的第一個元素

u’# Apache Spark’


例2-2. Scala統計文本行數

scala> val lines = sc.textFile(“README.md”) // 建立一個叫lines的

RDDlines: spark.RDD[String] = MappedRDD[…]

scala> lines.count() // 統計這個RDD中元素個數

res0: Long = 127scala> lines.first() // 獲得這個RDD中的第一個元素

res1: String = # Apache Spark


通過按鍵組合Ctrl-D可以推出shell。

小提示
我們將在第七章討論更多關於在叢集上分析資料的內容,但是你可能已經從啟動shell時的日誌輸出中注意到這一條資訊:
INFO SparkUI: Started SparkUI at http://[ipaddress]:4040
你可以在這裡訪問Spark UI,然後看到關於你的任務和叢集的各種各樣的資訊。

在例2-1和2-2中,lines變數是一個RDD,它是根據一個在我們本地機器上的文字檔建立的。我們可以在這個RDD上運行各種各樣的並行操作,例如統計資料集中元素的個數(這裡是文本的文本行行數)或者列印第一個元素。在接下來的章節裡,我們將深入討論RDD,但是在我們深入之前,讓我們花點兒時間介紹一下基本的Spark概念。


基本的Spark概念在這裡介紹:

Spark核心概念介紹(翻譯自Learning.Spark.Lightning-Fast.Big.Data.Analysis)

Spark的Python和Scala shell介紹(翻譯自Learning.Spark.Lightning-Fast.Big.Data.Analysis)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.