1. 程式人生 > >大資料入門之Spark快速入門及匯入資料,求平均值

大資料入門之Spark快速入門及匯入資料,求平均值

執行環境

本文的具體執行環境如下:

  • CentOS 7.6
  • Spark 2.4
  • Hadoop 2.6.0
  • Java JDK 1.8
  • Scala 2.10.5

一、下載安裝

首先在官網

https://spark.apache.org/downloads.html

下載對應版本的Spark

丟到你的伺服器上 自己的路徑 比如 /user/hadoop/My_Spark

解壓 

  tar -xvf XXX.tar.gz(你的壓縮包名稱)

然後 記錄你的 路徑  /user/hadoop/My_Spark/spark-2.4.0-bin-hadoop2.7

配置spark使用者許可權

  sudo chown -R hadoop:hadoop ./spark # 此處的 hadoop 為你的使用者名稱 ./spark為你的路徑名

安裝後,需要在 ./conf/spark-env.sh 中修改 Spark 的 Classpath,執行如下命令拷貝一個配置檔案:

  1. cd /user/hadoop/My_Spark/spark-2.4.0-bin-hadoop2.7
  2. cp ./conf/spark-env.sh.template ./conf/spark-env.sh

編輯 ./conf/spark-env.sh(vim ./conf/spark-env.sh

) ,在最後面加上如下一行:

export SPARK_DIST_CLASSPATH=$(/usr/local/hadoop/bin/hadoop classpath)

儲存後,Spark 就可以啟動運行了。

當然 還少不了設定環境變數

  vi ~/.bash_profile

在最後加入

  # spark
  export SPARK_HOME= (你的Spark路徑)
  export PATH=$PATH:$SPARK_HOME/bin

執行 Spark 示例

注意,必須安裝 Hadoop 才能使用 Spark,但如果使用 Spark 過程中沒用到 HstudentS,不啟動 Hadoop 也是可以的。此外,接下來教程中出現的命令、目錄,若無說明,則一般以 Spark 的安裝目錄(/usr/local/spark)為當前路徑,請注意區分。

在 ./examples/src/main 目錄下有一些 Spark 的示例程式,有 Scala、Java、Python、R 等語言的版本。我們可以先執行一個示例程式 SparkPi(即計算 π 的近似值),執行如下命令:

  1. cd /user/hadoop/My_Spark/spark-2.4.0-bin-hadoop2.7 #你的路徑
  2. ./bin/run-example SparkPi

通過 Spark Shell 進行互動分析

Spark shell 提供了簡單的方式來學習 API,也提供了互動的方式來分析資料。Spark Shell 支援 Scala 和 Python,本教程選擇使用 Scala 來進行介紹。

Scala

Scala 是一門現代的多正規化程式語言,志在以簡練、優雅及型別安全的方式來表達常用程式設計模式。它平滑地集成了面向物件和函式語言的特性。Scala 運行於 Java 平臺(JVM,Java 虛擬機器),併兼容現有的 Java 程式。

Scala 是 Spark 的主要程式語言,如果僅僅是寫 Spark 應用,並非一定要用 Scala,用 Java、Python 都是可以的。使用 Scala 的優勢是開發效率更高,程式碼更精簡,並且可以通過 Spark Shell 進行互動式實時查詢,方便排查問題。

執行如下命令啟動 Spark Shell:

  1. ./bin/spark-shell
Shell 命令

啟動成功後如圖所示,會有 “scala >” 的命令提示符。

成功啟動Spark Shell

基礎操作

Spark 的主要抽象是分散式的元素集合(distributed collection of items),稱為RDD(Resilient Distributed Dataset,彈性分散式資料集),它可被分發到叢集各個節點上,進行並行操作。RDDs 可以通過 Hadoop InputFormats 建立(如 HstudentS),或者從其他 RDDs 轉化而來。

 我們從本地路徑讀取一個預先準備好的student.txt檔案

student.txt 檔案內容如下 有四個欄位 id name age score

在互動式視窗中輸入  

  

import org.apache.spark.sql.types._
import org.apache.spark.sql.SparkSession
val spark=SparkSession.builder().getOrCreate()
val student = spark.read.option("header", true).option("delimiter",",").csv("file:///user/hadoop/run/student.txt")

這裡student是 spark的一個DataFrameReader 也就是RDD DataFrame 通過讀取本地檔案獲得的。

整個相當於一個臨時的表

我們這裡以CSV格式讀入 分隔符為 , 然後首行開啟

程式碼中通過 “file://” 字首指定讀取本地檔案。Spark shell 預設是讀取 HstudentS 中的檔案,需要先上傳檔案到 HstudentS 中,否則會有“org.apache.hadoop.mapred.InvalidInputException: Input path does not exist:”的錯誤。

 

 

DataFrame基本動作運算

show展示資料

可以用show() 方法來展示資料,show有以下幾種不同的使用方式:
show():顯示所有資料
show(n) :顯示前n條資料
show(true): 最多顯示20個字元,預設為true
show(false): 去除最多顯示20個字元的限制
show(n, true):顯示前n條並最多顯示20個自負

student.show()
student.show(3)
student.show(true)
student.show(false)
student.show(3,true)

 

輸入
student.show(student.count().toInt)

 


按成績倒序排序輸出

輸入
 student.sort(student("score").desc).show(student.count().toInt)

describe(cols: String*):獲取指定欄位的統計資訊

這個方法可以動態的傳入一個或多個String型別的欄位名,結果仍然為DataFrame物件,用於統計數值型別欄位的統計值,比如count, mean, stddev, min, max等。

 

 

求平均分數並輸出

 

單個DataFrame操作

 使用where篩選條件

where(conditionExpr: String):SQL語言中where關鍵字後的條件 ,傳入篩選條件表示式,可以用and和or。得到DataFrame型別的返回結果, 比如我們想得到使用者1或者使用助手1的操作記錄:

student.where("user=1 or type ='助手1'").show()

或者如上圖 

student.describe("score").where("summary ='mean'").show()

select:獲取指定欄位值

根據傳入的String型別欄位名,獲取指定欄位的值,以DataFrame型別返回,比如我們想要查詢user和type兩列:

student.select("user","type").show()

 

其他的常用操作自己看文件就行,女加微信男自強。本次教程暫時到此結束。

 

退出 

:quit