1. 程式人生 > >六.SparkSQL之DataFrame操作例項實戰API

六.SparkSQL之DataFrame操作例項實戰API

前面已經說過DataFrame的基本API操作,接下來就講下實際開發過程中的應用,首先需要準備一個數據原始檔,以下面這種格式的資料(這種資料是可以清洗日誌得到的)
在這裡插入圖片描述

第一步: 例項實戰演示

import org.apache.spark.sql.SparkSession
object DataFrameCase {

def main(args: Array[String]){

val spark = SparkSession.builder().master("local[2]").appName("DataFrameCase").getOrCreate()

val rdd =spark.sparkContext.textFile("student.data")

//匯入隱式轉換函式
import spark.implicits._
//轉換成DataFrame  要加上轉義字元 \\ ,因為有一些特殊字元沒有轉義字元的話不識別
val student = rdd.map(_.split("\\|")).map(line => Student(line(0).toInt,line(1),line(2),line(3))).toDF()
//student2為了測試join方法
val student2 = rdd.map(_.split("\\|")).map(line => Student(line(0).toInt,line(1),line(2),line(3))).toDF()

student.show()
在這裡插入圖片描述

//使用show方法,預設顯示的是前20條,如果想看到更多需要在方法中加入Int型別的引數,
//同時,該方法在展示資料的時候有擷取的功能,長度過長會顯示…
//因此,想要顯示全部的話需要加上一個false引數,因為預設的是true就是擷取
student.show(30,false)
在這裡插入圖片描述

//顯示資料的前10行資料
student.take(10)
//顯示第一條資料 等同於 student.head(3)(顯示前三條資料)
student.first()
//過濾掉名字為空的資料
student.filter("name !='' OR name != 'NULL' " ).show

在這裡插入圖片描述

//找出名字以l開頭的人
student.filter(“SUBSTR(name,0,1)=‘l’”).show()
在這裡插入圖片描述

//查詢所有的內建函式
spark.sql(“show functions”).show(1000)
在這裡插入圖片描述

//按照名字排序操作
student.sort(student.col("name"))
//按照名字降序進行排列
student.sort(student.col("name").desc)

//佇列進行重新命名
student.select(student(“name”).as(“student_name”)).show()
在這裡插入圖片描述
//join操作
student.join(student2,student.col(“id”) === student2.col(“id”)).show()
在這裡插入圖片描述


spark.stop()
}
case class Student(id: Int,name: String, phone: String, email: String )
}