六.SparkSQL之DataFrame操作例項實戰API
阿新 • • 發佈:2019-02-06
前面已經說過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 )
}