産生背景:
它不是SparkSQl提出的,而是早在R,Pandas語言就有了
想提供閱聽人廣的API
RDD和MapReduce程式設計門檻高
概念:
A DataFrame is a Dataset organized into named column(以列(列名,列的類型,列值)的形式構成分布式資料集,按照列賦予不同名稱
A Dataset is a distributed collection of data(RDD with schema)
It is conceptually equivalent to a table in a relational database or a data frame in R/Python, but with richer optimizations under the hood
An abstraction for selecting,filtering,aggregation,and plotting structured data
Previous SchemaRDD(SPark<1.3)
DataFrame對比RDD:
RDD:
Java/scala==>jvm
python=>python runtime(執行效率不一定)
DataFrame:
Java/scala/python==>Logic Plan(執行效率一樣)
可以處理結構體,map,數組
友善實用
DataFrame常用API:
DataFrame與RDD互操作之一:反射方式
使用反射來推斷包含了特定資料類型的RDD的中繼資料
使用DataFrameAPI或者Sql方式程式設計
DataFrame與RDD互操作之一:程式設計方式
DataFrame與RDD互操作比較:
反射:case class 前提:事先需要知道你的字段,字段類型
程式設計:Row 如果第一種情況不能滿足你的要求(事先不知道列)
檢視内置函數:spark.sql("show functions").show;
DataSets概念:
In the Scala API,
DataFrame
is simply a type alias of
Dataset[Row]