1. 程式人生 > >Spark 2.4.0 程式設計指南--快速入門

Spark 2.4.0 程式設計指南--快速入門

Spark 2.4.0 程式設計指南–快速入門

在這裡插入圖片描述

更多資源

視訊

文件

前置條件

  • 已安裝好java(選用的是java 1.8.0_191)
  • 已安裝好scala(選用的是scala 2.11.121)
  • 已安裝好hadoop(選用的是Hadoop 3.1.1)
  • 已安裝好spark(選用的是spark 2.4.0)

技能標籤

  • Spark 2.4.0 Spark session available as ‘spark’
  • 在Spark 2.0之後,RDD被資料集(Dataset)取代
  • Spark session 讀取HDFS檔案做為資料集
  • 資料集函式,count(),first(),filter(),reduce()
  • 統計所有行單詞總個數
  • 計算行中最多單詞的個數
  • 計算最多單詞個數的行
  • 按單詞分組統計個數(WordCount)
  • 官網: http://spark.apache.org/docs/2.4.0/quick-start.html

示例

  • Spark session 讀取HDFS檔案做為資料集
 val dataSet = spark.read.textFile("/home/liuwen/data/a.txt")
  • 資料集呼叫count()函式
 dataSet.count()

  • 資料集呼叫first()函式
 //其實呼叫的是head()函式
 dataSet.first()
  • 資料集呼叫show()函式
 dataSet.show()  //預設取前20行資料,並進行20個字元的截斷
 dataSet.show(10,false)   //取前20行資料,並且不進行截斷
  • 資料集呼叫filter()函式
 dataSet.filter(line => line.contains("spark"))
  • 統計所有行單詞總個數
 import spark.implicits._
val lineWordLength = dataSet.map( line => line.split(" ").size)
val result = lineWordLength.reduce((a,b) => a + b)

  • 計算行中最多有多少個單詞
import spark.implicits._
val lineWordLength = dataSet.map( line => line.split(" ").size)
val result = lineWordLength.reduce((a,b) => Math.max(a,b))

  • 計算最多單詞個數的行
import spark.implicits._
val result = dataSet.reduce((a,b) => {
  if(a.split(" ").size > b.split(" ").size) a  else b
})

  • 按單詞分組統計單詞個數(WorldCount)
import spark.implicits._

    val distFile = spark.read.textFile("hdfs://standalone.com:9000/home/liuwen/data/word.txt")

    //方式一
    //val dataset = distFile.flatMap( line => line.split(" ")).groupByKey(x => x ).count()


    //方式二
    val dataset = distFile.flatMap( line => line.split(" ")).map(x => (x,1)).groupByKey(x => x).reduceGroups((a,b) => (a._1,a._2+b._2))

    //方式三
    //val dataset = distFile.flatMap( line => line.split(" ")).groupByKey(identity ).count()


end