Spark快速開始

    本文主要介紹快速使用Spark的方法。首先通過Spark的交互式shell介紹相關的API,然後介紹如何使用Java、Scala和Python編寫應用程序。

    開始介紹之前需要從Spark website下載一個發行包。雖然我們不使用HDFS,但是可以下載任何版本的Hadoop包。

    基於Spark Shell的交互式分析

    Spark's shell 除了是一個強大的交互式分析數據的工具,也提供了相關API的簡單學習方式。Scala和Python都支持它。在Spark安裝路徑下運行./bin/pyspark

  Spark主要概念是一個叫做彈性的分佈式數據集合-RDDs。RDDS能夠通過Hadoop InputFormats或者其它RDDs來創建。下面代碼是通過在Spark安裝路徑下的README文件創建一個新的RDD:

     >>> textFile = sc.textFile("README.md")

     RDDs有actions和transformations兩種操作,actions返回值,transformations返回一個指向新RDDs的指針,下面的代碼是用來統計textFile的單詞數和顯示第一個元素:

     >>> textFile.count()

    126

    >>> textFile.first()

    u"#Apache Spark"

    filter是transformation的一種,它可以返回一個新的由文件元素子集合組成的RDD

    >>> linesWithSpark = textFile.filter(lambda line: "Spark" in line)

    我們可以將以上的動作合併到一行代碼中

    >>> textFile.filter(lambda line: "Spark" in line).count()

    15

    更多的RDD操作

    RDD actions和transformations能夠用於更復雜的計算中,下面的代碼用來找出最多單詞的函數

    >>> textFile.map(lambda line: len(line.split())).reduce(lambda a, b: a if (a > b) else b)

    15

    第一個map創建一個元素爲整數的RDD,然後該RDD調用reduce找出最大的數。

    MapReduce是一個一般的數據流模式,就像流行的Hadoop那樣,Spark能夠獨立的簡單的完成MapReduce流

    >>> wordCounts = textFile.flatMap(lambda line: line.split()).map(lambda word: (word, 1)).reduceByKey(lambda a, b: a+b)

    Caching

    Spark支持將數據集合放入內存中緩存. 該功能有利於頻繁的訪問數據。

    >>> linesWithSpark.cache()

     >>> linesWithSpark.count()
    19

    獨立的應用程序

    通過Spark的API我們能編寫獨立的應用程序,並且運行在Scala、Java和Python的環境中。

    下面是Python的一個簡單的應用程序:

    """SimpleApp.py"""
    from pyspark import SparkContext


    logFile = "YOUR_SPARK_HOME/README.md"  # Should be some file on your system
    sc = SparkContext("local", "Simple App")
    logData = sc.textFile(logFile).cache()

    numAs = logData.filter(lambda s: 'a' in s).count()
    numBs = logData.filter(lambda s: 'b' in s).count()

    print("Lines with a: %i, lines with b: %i" % (numAs, numBs))

    # Use spark-submit to run your application
   $ YOUR_SPARK_HOME/bin/spark-submit \
          --master local[4] \
         SimpleApp.py
    ...
    Lines with a: 46, Lines with b: 23

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章