Spark Dataframe 解釋道
在 Spark 中,DataFrame 是組織到命名列中的分散式資料集合。它在概念上等同於關聯式資料庫中的表或 R / Python 中的資料框,但在引擎蓋下具有更豐富的優化。DataFrame 可以從多種來源構建,例如結構化資料檔案,Hive 中的表,外部資料庫或現有 RDD。
建立 Dataframe 的方法
val data= spark.read.json("path to json")
val df = spark.read.format("com.databricks.spark.csv").load("test.txt")
在選項欄位中,你可以提供標題,分隔符,字符集等等
你還可以從 RDD 建立 Dataframe
val rdd = sc.parallelize(
Seq(
("first", Array(2.0, 1.0, 2.1, 5.4)),
("test", Array(1.5, 0.5, 0.9, 3.7)),
("choose", Array(8.0, 2.9, 9.1, 2.5))
)
)
val dfWithoutSchema = spark.createDataFrame(rdd)
如果要使用模式建立 df
def createDataFrame(rowRDD: RDD[Row], schema: StructType): DataFrame
如果 Spark 提供了 RDD,為什麼我們需要 Dataframe
RDD 僅僅是一個彈性分散式資料集,它更像是一個無法優化的資料黑盒,因為可以對其執行的操作不受約束。
沒有內建的優化引擎:在使用結構化資料時,RDD 無法利用 Spark 的高階優化器,包括催化劑優化器和 Tungsten 執行引擎。開發人員需要根據其屬性優化每個 RDD。處理結構化資料:與 Dataframe 和資料集不同,RDD 不會推斷攝取資料的模式,並且需要使用者指定它。
Spark 中的 DataFrames 通過查詢優化器自動優化其執行。在對 DataFrame 進行任何計算之前,Catalyst 優化器會將用於構建 DataFrame 的操作編譯為物理計劃以供執行。因為優化器理解操作的語義和資料的結構,所以它可以做出明智的決策來加速計算。
DataFrame 的侷限性
編譯時型別安全:Dataframe API 不支援編譯時安全性,這限制了你在結構未知時運算元據。