在之前的部落格SparkSQL系列中,已經大緻為大家介紹了 DataFrame DataSet RDD
,
的概念以及它們之間與
之間的互轉的操作描述。本篇部落格,為大家帶來的是關于如何在IDEA上建立SparkSQL程式,并實作資料查詢與(DataFrame,DataSet,RDD)互相轉換的功能!

文章目錄
-
- IDEA中建立SparkSQL程式
-
- <1>資料查詢
- <2>類型轉化
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-sql_2.11</artifactId>
<version>2.1.1</version>
</dependency>
{"name":"Michael"}
{"name":"Andy", "age":30}
{"name":"Justin", "age":19}
object SparkSQL01_Demo {
def main(args: Array[String]): Unit = {
// 建立配置對象
val sparkConf = new SparkConf().setMaster("local[*]").setAppName("SparkSQL01_Demo")
// 建立 SparkSQL的環境變量
// SparkConf()
val spark = SparkSession
.builder()
.config(sparkConf)
.getOrCreate()
// 導入隐式轉換
import spark.implicits._
val df = spark.read.json("in/people.json")
// 查詢所有資料
df.show()
// 過濾器查詢
df.filter($"age">21).show()
// 建立臨時表
df.createOrReplaceTempView("persons")
// Sparksql 查詢
spark.sql("SELECT * FROM persons where age > 21").show()
// 釋放資源
spark.stop()
}
}
object SparkSQL02_SQL {
def main(args: Array[String]): Unit = {
// 建立配置對象
val sparkConf = new SparkConf().setMaster("local[*]").setAppName("SparkSQL01_Demo")
// 建立 SparkSQL的環境變量
// SparkSession()
val spark:SparkSession = SparkSession
.builder()
.config(sparkConf)
.getOrCreate()
// 導入隐式轉換
// 這裡的spark不是包名的含義,是SparkSession對象的名字
import spark.implicits._
// 建立RDD
val rdd: RDD[(Int, String, Int)] = spark.sparkContext.makeRDD(List((1,"zhangsan",20),(2,"lisi",30),(3,"wangwu",40)))
// 轉換為DF,需給出結構
val df: DataFrame = rdd.toDF("id","name","age")
// 轉換為DS,需給出類型
val ds: Dataset[User] = df.as[User]
// 轉換為DF
val df1: DataFrame = ds.toDF()
// 轉換為RDD
val rdd1: RDD[Row] = df1.rdd
//通路
rdd1.foreach(row=>{
// 擷取資料時,可以通過索引通路資料
println(row.getInt(0))
})
// 釋放資源
spark.stop()
}
// 定義一個樣例類
case class User(id:Int,name:String,age:Int)
}