第五章 Spark-SQL进阶(一)之Dataset用法
生活随笔
收集整理的這篇文章主要介紹了
第五章 Spark-SQL进阶(一)之Dataset用法
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Spark系列文章目錄
第一章 初識Spark
第二章 Spark-Core核心模型(一)
第二章 Spark-Core核心模型(二)
第三章 Spark-Core編程進階(一)
第三章 Spark-Core編程進階(二)
第四章 Spark-SQL基礎(一)
第四章 Spark-SQL基礎(二)
第五章 Spark-SQL進階(一)
第五章 Spark-SQL進階(二)
第五章 Spark-SQL進階(三)
文章目錄
- Spark系列文章目錄
- 第五章 Spark-SQL進階(一)
- 1.核心語法
- 1.1DataFrame
- 1.2數據類型
- 1.3注冊視圖
- 1.4Dataset
- 1.5Dataset API方法
第五章 Spark-SQL進階(一)
1.核心語法
1.1DataFrame
- 第一種方式
- 通過讀取外部數據集
- spark.read.數據源方法()
- DataFrameReader對象中有Spark內置支持數據源讀取數據的方法
- eg:parquet csv text json jdbc table orc等
- 第二種方式
- 通過createDataFrame方法傳遞RDD或Seq參數
- createDataFrame[A <: Product : TypeTag](rdd: RDD[A])
- createDataFrame(rowRDD: RDD[Row], schema: StructType)
- createDataFrame[A <: Product : TypeTag](data: Seq[A])
- 第三種方式
- 通過RDD或Seq對象隱式轉化方法
- rdd.toDF([colNames*])
- seq.toDF([colNames*])
1.2數據類型
SparkSQL和DataFrames支持以下數據類型
- 數值類型
- ByteType
- ShortType
- IntegerType
- LongType
- FloatType
- DoubleType
- DecimalType
- 字符串類型
- StringType
- 二進制類型
- BinaryType
- 布爾類型
- BooleanType
- 日期時間類型
- TimestampType DateType
- 復雜類型
- ArrayType (elementType, containsNull)
- MapType (keyType, valueType, valueContainsNull)
- StructType (fields)
- StructField(name, dataType, nullable)
注意,以上類型都來自 import org.apache.spark.sql.types._。
1.3注冊視圖
視圖分為:
-
臨時視圖
- 范圍是會話級別
- 注冊臨時視圖:createTempView(viewName: String)
- 注冊或替換臨時視圖:createOrReplaceTempView(viewName: String)(推薦)
-
全局臨時視圖
-
范圍是所有會話
-
所有會話之間共享一個全局臨時視圖
-
與系統數據庫global_temp相關聯
- 使用全局臨時視圖時必須使用限定名稱來引用
-
注冊全局臨時視圖:createGlobalTempView(viewName: String)
-
注冊或替換全局臨時視圖:createOrReplaceGlobalTempView(viewName: String)(推薦)
-
使用案例:
//1.注冊為全局臨時視圖 df.createGlobalTempView("people") //2.運行SQL的方式查詢數據,注意,全局臨時視圖需關聯系統數據庫global_temp spark.sql("SELECT * FROM global_temp.people").show() //3.在一個新的會話中查詢數據 spark.newSession().sql("SELECT * FROM global_temp.people").show()?
1.4Dataset
- 第一種方式
- 通過createDataset方法傳遞RDD或Seq參數
- createDataset[T : Encoder](data: Seq[T])
- createDataset[T : Encoder](data: RDD[T])
- 第二種方式
- 通過DataFrame對象轉化創建
- df.as[T]
- 第三種方式
- 通過RDD或Seq對象隱式轉化創建
- rdd.toDS
- seq.toDS
1.5Dataset API方法
-
類似于RDD的API
- map
- flatMap
- mapPartitions
- filter
- joinWith
- orderBy
- repartition
- repartitionByRange
- sample
- transform
- sort
- sortWithinPartitions
- union
- unionByName
- distinct
- coalesce
-
輸出到控制臺
- show([numRows: Int,[truncate: Boolean|truncate: Int,[vertical: Boolean]]]):Unit
-
查看數據結構信息
- printSchema():Unit
-
查詢對應列數據
- select(col: String, cols: String*): DataFrame
- *select(cols: Column*): DataFrame
- selectExpr(exprs: String*): DataFrame
- select[U1](c1: TypedColumn[T, U1]): Dataset[U1]
-
按條件查詢
- where(condition: Column|conditionExpr: String): Dataset[T]
- filter(condition: Column|conditionExpr: String|func: T => Boolean):Dataset[T]
-
限制返回行數
- limit(n: Int): Dataset[T]
-
分組
- groupBy(cols: Column*|col1: String, cols: String*): RelationalGroupedDataset
-
獲取某列數據
- apply(colName: String): Column
- col(colName: String): Column
注意,完整的方法可查看Dataset參考API文檔。
總結
以上是生活随笔為你收集整理的第五章 Spark-SQL进阶(一)之Dataset用法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mpvue 小程序下拉刷新 三个点那种
- 下一篇: android ViewPager 图片