本文中含有需要您注意的重要提示信息,忽略該信息可能對您的業務造成影響,請務必仔細閱讀。
ORC是為Hadoop作業而設計的自描述,類型感知的列存儲文件格式。它針對大型流式數據讀取進行了優化,但集成了對快速查詢所需要行的相關支持。ORC和Parquet文件格式的區別:本質上Parquet針對Spark進行了優化,而ORC針對Hive進行的優化。
前提條件
通過主賬號登錄阿里云 Databricks控制臺。
已創建集群,具體請參見創建集群。
已使用OSS管理控制臺創建非系統目錄存儲空間,詳情請參見創建存儲空間。
創建集群并通過knox賬號訪問Notebook。
警告
首次使用DDI產品創建的Bucket為系統目錄Bucket,不建議存放數據,您需要再創建一個Bucket來讀寫數據。
說明
DDI訪問OSS路徑結構:oss://BucketName/Object
BucketName為您的存儲空間名稱。
Object為上傳到OSS上的文件的訪問路徑。
例:讀取在存儲空間名稱為databricks-demo-hangzhou文件路徑為demo/The_Sorrows_of_Young_Werther.txt的文件
// 從oss地址讀取文本文檔
val dataRDD = sc.textFile("oss://databricks-demo-hangzhou/demo/The_Sorrows_of_Young_Werther.txt"
實例
1.寫入ORC數據到OSS 并讀取數據
%spark
val inputPath="oss://databricks-fjl-test/datas/orc_data"
case class MyCaseClass(key: String, group: String, value: Int, someints: Seq[Int], somemap: Map[String, Int])
val dataframe = sc.parallelize(Array(MyCaseClass("a", "vowels", 1, Array(1), Map("a" -> 1)),
MyCaseClass("b", "consonants", 2, Array(2, 2), Map("b" -> 2)),
MyCaseClass("c", "consonants", 3, Array(3, 3, 3), Map("c" -> 3)),
MyCaseClass("d", "consonants", 4, Array(4, 4, 4, 4), Map("d" -> 4)),
MyCaseClass("e", "vowels", 5, Array(5, 5, 5, 5, 5), Map("e" -> 5)))
).toDF()
dataframe.coalesce(1).write.mode("overwrite").orc(inputPath)
2.讀取orc數據
%spark
val inputPath="oss://databricks-data-source/datas/orc_data"
val dataDF= spark.read.format("orc")
.option("header", "true")
.option("inferSchema","true")
.option("mode", "FAILFAST")
.load(inputPath)
dataDF.show(3)
dataDF.printSchema()
SQL 方式
%sql
CREATE TABLE orcTable
USING orc
OPTIONS (path "oss://databricks-data-source/datas/orc_data")
%sql
select * from orcTable limit 3
3.寫入ORC數據到OSS
dataDF.write.format("orc").mode("overwrite").save("oss://databricks-data-source/datas/out/orc")
文檔內容是否對您有幫助?