文章目錄
- 1、添加依賴
- 2、代碼實作
- 2.1 構建環境
- 2.2 DataFrame的創建
- 2.3 DataSet的創建
- 2.4 RDD & DataFrame
- 2.5 RDD & DataSet
- 2.5 DataFrame & DataSet
1、添加依賴
當前熱門的開發編輯器當屬 IDEA 了,接下來介紹一下在該款開發工具中的使用,
首先我們需要為Spark-SQL模塊匯入依賴:
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-sql_2.11</artifactId>
<version>2.2.0</version>
</dependency>
在原有的pom.xml的基礎上更新一下即可!(完整配置連接如下,永久有效哦)😎😎😎
提取連接: https://pan.baidu.com/s/1o1px2DBN5AEWDtouxlUhRw
提取碼:eirr
2、代碼實作
2.1 構建環境
不同于spark-core,在其基礎之上,spark-sql內置封裝了新的入口SparkSession,起初,SparkSQL創建了兩個入口:SQLContext、HiveContext,之后為了解決入口不統一的問題,創建了一個新的入口節點 — SparkSession,作為整個Spark生態工具的統一入口節點,包括了SQLContext、HiveContext、SparkContext等組建的功能,
注意:
- SparkSession的創建需要借助伴生類的
Builder()進行創建,因為原始的SparkSession是私有封裝,外部無法直接訪問,

object Spark01_sql_test {
def main(args: Array[String]): Unit = {
// TODO: 創建sparkSession的運行環境
val conf = new SparkConf().setMaster("local[*]").setAppName("test")
val spark = new SparkSession.Builder().config(conf).getOrCreate()
// TODO:邏輯操作
......
// TODO:關閉資源
spark.stop()
}
}
回傳頂部
2.2 DataFrame的創建
1、構建json資料檔案
{"username":"張三","age": 25,"sex":"男"}
{"username":"李四","age": 23,"sex":"男"}
{"username":"王五","age": 24,"sex":"女"}
{"username":"趙六","age": 22,"sex":"男"}
2、獲取資料
- 通過
spark.read從檔案中獲取的資料集會被自動保存為DataFrame型別的資料,
val df: DataFrame = spark.read.json("data/user.json")
df.show()

3、SQL語法
- 在
創建好資料的視圖表之后,直接使用spark.sql執行sql陳述句
println("************SQL*************")
// SQL
df.createOrReplaceGlobalTempView("user")
spark.sql("select * from global_temp.user").show()

4、DSL語法
- 使用spark封裝的
sql 語法API進行具體操作 - 注意要匯入隱式轉換:
import spark.implicits._
println("************DSL*************")
// DSL
import spark.implicits._ // 隱式轉換
df.select('username,$"age",'sex).show()

回傳頂部
2.3 DataSet的創建
// TODO:DataSet
val seq = Seq(1,2,3)
val ds = seq.toDS()
ds.show()

查看底層可以知道:type DataFrame = Dataset[Row],也就是DataFrame是DataSet指定型別的一種資料物件,所以DataFrame適用的方法DataSet也均適用,

回傳頂部
2.4 RDD & DataFrame
// TODO:RDD <=> DataFrame
// 創建rdd
val rdd: RDD[(Int, String, Int)] = spark.sparkContext.makeRDD(
List(
(1,"zhangsan",30),(2,"lisi",25),(3,"wangwu",40)
)
)
// toDF 轉為 DataFrame
val df: DataFrame = rdd.toDF("id","name","age")
df.show()
// df.rdd 轉為 rdd:RDD[Row]
val backRDD: RDD[Row] = df.rdd
backRDD.collect().foreach(println)

回傳頂部
2.5 RDD & DataSet
// TODO:RDD <=> DataSet
// 創建RDD
val rdd: RDD[(Int, String, Int)] = spark.sparkContext.makeRDD(
List(
(1, "zhangsan", 30), (2, "lisi", 25), (3, "wangwu", 40)
)
)
// 轉換RDD的資料型別
val mapRDD: RDD[user] = rdd.map {
case (id, name, age) => {
user(id, name, age)
}
}
// toDS 轉為 DataSet
val toDS: Dataset[user] = mapRDD.toDS()
toDS.show()
// ds.rdd 轉為 rdd
val backRDD = toDS.rdd
backRDD.collect().foreach(println)

回傳頂部
2.5 DataFrame & DataSet
- DataFrame 轉換為 DataSet 需要給出明確的資料結構型別資訊,這里我們創建user樣例類作為DataFrame的資料結構型別補充,
// 樣例類
case class user(id:Int,username:String,age:Int)
// TODO:DataFrame <=> DataSet
val ds: Dataset[user] = df.as[user]
val backDF: DataFrame = ds.toDF()
回傳頂部
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/404090.html
標籤:其他
上一篇:盤點10個程式員可以接私活的平臺和一些建議,賺麻了...
下一篇:RabbitMQ安裝及配置
