学习笔记Spark(七)—— Spark SQL应用(2)—— Spark DataFrame基础操作
二、Spark DataFrame基礎(chǔ)操作
2.1、DataFrame
- DataFrame是一種不可變的分布式數(shù)據(jù)集,這種數(shù)據(jù)集被組織成指定的列,類似于關(guān)系數(shù)據(jù)庫中的表。
- 數(shù)據(jù)集的每一列都帶有名稱和類型,對(duì)于數(shù)據(jù)的內(nèi)部結(jié)構(gòu)又很強(qiáng)的描述性。
- RDD是分布式的Java對(duì)象的集合。DataFrame是分布式的Row對(duì)象的集合。
2.1.1、DataFrame特點(diǎn)
- 支持KB級(jí)到PB級(jí)得到數(shù)據(jù)處理
- 支持多種數(shù)據(jù)格式和存儲(chǔ)系統(tǒng)
- 通過Spark SQL Catalyst優(yōu)化器可以進(jìn)行高效的代碼生成與優(yōu)化
- 能夠無縫集成Spark上的大數(shù)據(jù)處理工具
- 提供了Python、Java、Scala、R等多種語言API
2.2、創(chuàng)建DataFrame
- 從結(jié)構(gòu)化數(shù)據(jù)文件創(chuàng)建DataFrame
- 從外部數(shù)據(jù)庫創(chuàng)建DataFrame
- 從RDD創(chuàng)建DataFrame
- 從Hive中的表創(chuàng)建DataFrame
2.2.1、從結(jié)構(gòu)化數(shù)據(jù)文件創(chuàng)建DataFrame
查看DataFrame
- printSchema:查看數(shù)據(jù)模式,打印出列的名稱和類型
- show:查看數(shù)據(jù)
show():顯示前20條記錄
show(numRows:Int):顯示numRows條
show(truncate:Boolean):是否最多只顯示20個(gè)字符,默認(rèn)為true
show(numRows:Int,truncate:Boolean):顯示numRows條記錄并設(shè)置過長字符串的顯示格式 - first/head/take/takeAsList:獲取若干行數(shù)據(jù)
- collect/collectAsList:獲取所有數(shù)據(jù)
示例:讀取parquet文件創(chuàng)建DataFrame
1、從parquet讀取數(shù)據(jù):
2、從json讀取數(shù)據(jù):
val df_json = spark.read.json("/user/root/sparksql_data/people.json")3、從csv讀取數(shù)據(jù):
val df_csv = spark.read.option("header", "true").option("sep", ";").csv("/user/root/sparksql_data/people.csv")2.2.2、從外部數(shù)據(jù)庫創(chuàng)建DataFrame
示例:讀取mysql數(shù)據(jù)庫test的student表
2.2.3、從RDD創(chuàng)建DataFrame-方法1
示例:
2.2.4、從RDD創(chuàng)建DataFrame-方法2
示例:讀取people.txt創(chuàng)建DataFrame
2.2.5、從Hive中的表創(chuàng)建DataFrame
示例:
任務(wù)1:讀取Hive中的學(xué)生成績表bigdata和math,查看學(xué)生信息
創(chuàng)建Hive表bigdata和math
導(dǎo)入數(shù)據(jù)到表中
讀取Hive表bigdata和math創(chuàng)建DataFrame
查看DataFrame
2.3、DataFrame常用API
示例:
2.3.1、自定義udf-用于SQL查詢
- import org.apache.spark.sql.functions._
- import org.apache.spark.sql.types._
- udf(f: AnyRef, dataType: DataType)
示例:
2.3.2、自定義udf-用于DataFrame API
- org.apache.spark.sql.functions._
- import org.apache.spark.sql.types._
- udf(f: AnyRef, dataType: DataType)
示例:
任務(wù)2:統(tǒng)計(jì)每個(gè)學(xué)生的平均成績和總分
2.4、保存DataFrame
-
1、保存成文本文件
-
2、保存到外部數(shù)據(jù)庫
-
3、保存為Hive表
-
write方法可以將DataFrame保存成文件,write操作有一個(gè)可選參數(shù)SaveMode,用這個(gè)參數(shù)可以指定如何處理數(shù)據(jù)已經(jīng)存在的情況。
參數(shù)SaveMode:
Overwrite代表覆蓋目錄下之前存在的數(shù)據(jù)
Append代表給指導(dǎo)目錄下追加數(shù)據(jù)
Ignore代表如果目錄下已經(jīng)有文件,那就什么都不執(zhí)行
ErrorIfExists代表如果保存目錄下存在文件就報(bào)錯(cuò)
2.4.1、保存為文本文件
-
df.write.mode("overwrite").parquet(path: String)
-
df.write.mode("overwrite"). json(path: String)
-
df.write.mode("overwrite").option("header", "true").option("sep", ";"). csv(path: String)
-
df.write.mode("overwrite").text(path: String) //只能有一個(gè)字段
2.4.2、保存到外部數(shù)據(jù)庫
- jdbc(url: String, table: String, connectionProperties: Properties)
mysql查看:
2.4.3、保存到Hive
- df.write.mode("overwrite"). saveAsTable(tableName: String)
hive查看(先進(jìn)入train數(shù)據(jù)庫,然后再查看):
任務(wù)3:將每個(gè)學(xué)生各科成績、總分、平均分都保存到Hive中
- 合并學(xué)生的各科成績、總分、平均分
- 保存DataFrame到Hive
hive查看(先進(jìn)入train數(shù)據(jù)庫,然后再查看):
結(jié)果:
總結(jié)
以上是生活随笔為你收集整理的学习笔记Spark(七)—— Spark SQL应用(2)—— Spark DataFrame基础操作的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 学习笔记Spark(六)—— Spark
- 下一篇: 学习笔记Spark(八)—— Spark