Spark SQL之DataFrame概述
產(chǎn)生背景
DataFrame不是Spark SQL提出的,而是早期在R、Pandas語(yǔ)言就已經(jīng)有了的。
Spark RDD API vs MapReduce API
Spark誕生之初,其中一個(gè)很重要的目標(biāo)就是給大數(shù)據(jù)生態(tài)圈提供基于通用語(yǔ)言(java、scala、python)的而且簡(jiǎn)單易用的API。Spark RDD API 通過(guò)函數(shù)式編程模式。如果使用MapReduce,則代碼量是非常多的。但是對(duì)于不懂Java或者Scala語(yǔ)言的小伙伴是很難上手的。
R/Pandas
在R語(yǔ)言中是有DataFrame概念的,而且R語(yǔ)言非常適合做數(shù)據(jù)統(tǒng)計(jì)和分析。但是R語(yǔ)言和Pandas的局限性非常強(qiáng)。僅僅能支持單機(jī)處理。現(xiàn)在單機(jī)處理的數(shù)據(jù)能力必然是有限的。
因此Spark的DataFrame就應(yīng)運(yùn)而生。Spark SQL中的DataFrame就是從R/Pandas中轉(zhuǎn)換過(guò)來(lái)的。
Spark SQL DataFrame
DataSet是一個(gè)分布式的數(shù)據(jù)集。
DataFrame是一個(gè)以列(列名、列的類(lèi)型、列值)的形式構(gòu)成的分布式數(shù)據(jù)集。按照列賦予不同的名稱。可以理解為關(guān)系型數(shù)據(jù)庫(kù)中的一張表。DataFrame可以包括文件中的數(shù)據(jù)、hive中的表或者其他數(shù)據(jù)源如Mysql,Hbase,或者已存在的RDD。
在spark1.3之前沒(méi)有DataFrame概念,而是有一個(gè)SchemaRDD概念。
DataFrame vs RDD
RDD是分布式的可以進(jìn)行并行處理的集合。
DataFrame與RDD類(lèi)似,也是一個(gè)分布式數(shù)據(jù)集,但是DataFrame提供的更像是傳統(tǒng)數(shù)據(jù)庫(kù)中的一張表。除了數(shù)據(jù)之外,還有列名、列值、列屬性。
DataFrame所提供的API層次更高。
加入RDD中有一個(gè)Person數(shù)據(jù),每一行就是一條Person數(shù)據(jù),但是Person數(shù)據(jù)中有什么具體信息都不知道。
DataFrame是按照列的形式組織的,所以我們必然知道列名是什么,數(shù)據(jù)類(lèi)型是什么。
因此使用DataFrame時(shí),sparkSQL在執(zhí)行過(guò)程中可以很清楚的知道數(shù)據(jù)集中有哪些列,列的類(lèi)型是什么。Spark可以根據(jù)這些信息做很好的優(yōu)化。例如可以只取一個(gè)name字段或者只獲取age字段,而不需要知道其他列數(shù)據(jù)。
總結(jié)
以上是生活随笔為你收集整理的Spark SQL之DataFrame概述的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Spark SQL之jdbc方式访问
- 下一篇: SparkSQL之DataFrame A