第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Spark中的DataFrame,Dataset和RDD之間的區(qū)別

Spark中的DataFrame,Dataset和RDD之間的區(qū)別

Spark中的DataFrame,Dataset和RDD之間的區(qū)別我只是想知道Apache Spark中的RDD和DataFrame (Spark 2.0.0 DataFrame只是一個類型別名Dataset[Row])有什么區(qū)別?你能把一個轉(zhuǎn)換成另一個嗎?
查看完整描述

3 回答

?
紅顏莎娜

TA貢獻(xiàn)1842條經(jīng)驗(yàn) 獲得超13個贊

通過DataFrame谷歌搜索“DataFrame定義”來定義A:

數(shù)據(jù)框是一個表或二維數(shù)組結(jié)構(gòu),其中每列包含一個變量的測量值,每行包含一個案例。

因此,DataFrame由于其表格格式,a 具有額外的元數(shù)據(jù),這允許Spark在最終查詢上運(yùn)行某些優(yōu)化。

RDD,另一方面,僅僅是- [R esilient d istributed d ataset是比較數(shù)據(jù)的黑盒不能作為可以針對它要執(zhí)行的操作進(jìn)行優(yōu)化的,并不像約束。

但是,你可以從一個數(shù)據(jù)幀到一個RDD通過它的rdd方法,你可以從一個去RDDDataFrame(如果RDD是表格形式),通過該toDF方法

通常DataFrame由于內(nèi)置的查詢優(yōu)化,建議盡可能使用。


查看完整回答
反對 回復(fù) 2019-07-27
?
MYYA

TA貢獻(xiàn)1868條經(jīng)驗(yàn) 獲得超4個贊

首先是DataFrame從進(jìn)化而來SchemaRDD。

是的..之間的轉(zhuǎn)換Dataframe,并RDD是絕對有可能的。

以下是一些示例代碼段。

  • df.rdd 是 RDD[Row]

以下是一些創(chuàng)建數(shù)據(jù)框的選項(xiàng)。

  • 1)yourrddOffrow.toDF轉(zhuǎn)換為DataFrame。

  • 2)使用createDataFramesql上下文

    val df = spark.createDataFrame(rddOfRow, schema)

架構(gòu)可以來自下面的一些選項(xiàng),如很好的SO帖子所描述的..
來自scala案例類和scala反射api

import org.apache.spark.sql.catalyst.ScalaReflectionval schema = ScalaReflection.schemaFor[YourScalacaseClass].dataType.asInstanceOf[StructType]

或使用 Encoders

import org.apache.spark.sql.Encodersval mySchema = Encoders.product[MyCaseClass].schema

如Schema所描述的也可以使用StructType和 創(chuàng)建StructField

val schema = new StructType()
  .add(StructField("id", StringType, true))
  .add(StructField("col1", DoubleType, true))
  .add(StructField("col2", DoubleType, true)) etc...

事實(shí)上,現(xiàn)在有3個Apache Spark API ..

  1. RDD API:

RDD,因?yàn)?.0版本(彈性分布式數(shù)據(jù)集)API已在火花。

所述RDDAPI提供了許多轉(zhuǎn)化方法,例如map(), filter(),和reduce(),用于對數(shù)據(jù)執(zhí)行計算。這些方法中的每一個都產(chǎn)生RDD表示變換數(shù)據(jù)的新方法。但是,這些方法只是定義要執(zhí)行的操作,并且在調(diào)用操作方法之前不會執(zhí)行轉(zhuǎn)換。動作方法的示例是collect()和saveAsObjectFile()。

RDD示例:

rdd.filter(_.age > 21) // transformation
   .map(_.last)// transformation.saveAsObjectFile("under21.bin") // action

示例:使用RDD按屬性過濾

rdd.filter(_.age > 21)
  1. DataFrame API

Spark 1.3引入了一個新的DataFrameAPI作為Project Tungsten計劃的一部分,該計劃旨在提高Spark的性能和可擴(kuò)展性。該DataFrameAPI引入了一個模式來描述數(shù)據(jù)的概念,使星火管理模式和唯一的節(jié)點(diǎn)之間傳遞數(shù)據(jù),比使用Java序列化一個更有效的方式。

DataFrameAPI是從根本上不同的RDDAPI,因?yàn)樗墙⒁粋€關(guān)系查詢計劃,星火的催化劑優(yōu)化就可以執(zhí)行的API。對于熟悉構(gòu)建查詢計劃的開發(fā)人員而言,API很自然

示例SQL樣式:

df.filter("age > 21");

限制: 因?yàn)榇a是按名稱引用數(shù)據(jù)屬性,所以編譯器無法捕獲任何錯誤。如果屬性名稱不正確,則只有在創(chuàng)建查詢計劃時才會在運(yùn)行時檢測到錯誤。

DataFrameAPI的另一個缺點(diǎn)是它非常以scala為中心,雖然它確實(shí)支持Java,但支持有限。

例如,在DataFrame從現(xiàn)有RDDJava對象創(chuàng)建時,Spark的Catalyst優(yōu)化器無法推斷架構(gòu)并假定DataFrame中的任何對象都實(shí)現(xiàn)了該scala.Product接口。Scala case class解決了這個問題,因?yàn)樗麄儗?shí)現(xiàn)了這個界面。

  1. Dataset API

DatasetAPI作為Spark 1.6中的API預(yù)覽發(fā)布,旨在提供兩全其美的功能; 熟悉的面向?qū)ο缶幊田L(fēng)格和RDDAPI的編譯時類型安全性,但具有Catalyst查詢優(yōu)化器的性能優(yōu)勢。數(shù)據(jù)集也使用與DataFrameAPI 相同的高效堆外存儲機(jī)制 。

在序列化數(shù)據(jù)時,DatasetAPI具有編碼器的概念, 可在JVM表示(對象)和Spark的內(nèi)部二進(jìn)制格式之間進(jìn)行轉(zhuǎn)換。Spark具有非常先進(jìn)的內(nèi)置編碼器,它們生成字節(jié)代碼以與堆外數(shù)據(jù)交互,并提供對各個屬性的按需訪問,而無需對整個對象進(jìn)行反序列化。Spark尚未提供用于實(shí)現(xiàn)自定義編碼器的API,但計劃在將來的版本中使用。

此外,DatasetAPI旨在與Java和Scala同樣良好地工作。使用Java對象時,重要的是它們完全符合bean。

示例DatasetAPI SQL樣式:

dataset.filter(_.age < 21);

評價差異。之間DataFrameDataSet 

進(jìn)一步閱讀...數(shù)據(jù)庫文章 - 三個Apache Spark API的故事:RDDs與DataFrames和數(shù)據(jù)集


查看完整回答
反對 回復(fù) 2019-07-27
  • 3 回答
  • 0 關(guān)注
  • 2374 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號