1 回答

TA貢獻(xiàn)1884條經(jīng)驗(yàn) 獲得超4個(gè)贊
toPandas
(PySpark)/ as.data.frame
(SparkR)
在創(chuàng)建本地?cái)?shù)據(jù)框之前,必須先收集數(shù)據(jù)。例如,toPandas
方法如下所示:
def toPandas(self): import pandas as pd return pd.DataFrame.from_records(self.collect(), columns=self.columns)
您需要在每個(gè)節(jié)點(diǎn)上都安裝有Python(最好具有所有依賴項(xiàng))。
SparkR對(duì)應(yīng)項(xiàng)(as.data.frame
)只是的別名collect
。
為了在這兩種情況下的數(shù)據(jù)概括為collected
向駕駛員節(jié)點(diǎn)并轉(zhuǎn)換到本地?cái)?shù)據(jù)結(jié)構(gòu)(pandas.DataFrame
和base::data.frame
在Python和R分別地)。
向量化的用戶定義函數(shù)
由于火花2.3.0 PySpark還提供了一組pandas_udf
(SCALAR
,GROUPED_MAP
,GROUPED_AGG
),其并行地對(duì)由下式定義的數(shù)據(jù)塊進(jìn)行操作
在
SCALAR
變體情況下進(jìn)行分區(qū)GROUPED_MAP
和的情況下的分組表達(dá)式GROUPED_AGG
。
每個(gè)塊用
一種或多種
pandas.core.series.Series
(如果有SCALAR
和)GROUPED_AGG
變體。pandas.core.frame.DataFrame
如果是GROUPED_MAP
變體,則為單個(gè)。
類似地,從Spark 2.0.0開始,SparkR提供dapply
并gapply
在data.frames
分區(qū)和分組表達(dá)式分別定義的函數(shù)上運(yùn)行。
上述功能:
不要收集給司機(jī)。除非數(shù)據(jù)僅包含單個(gè)分區(qū)(即帶有
coalesce(1)
)或分組表達(dá)式是微不足道的(即帶有),否則groupBy(lit(1))
就沒有單個(gè)節(jié)點(diǎn)的瓶頸。將相應(yīng)的塊加載到相應(yīng)執(zhí)行器的內(nèi)存中。因此,它受每個(gè)執(zhí)行器上可用的單個(gè)塊/內(nèi)存大小的限制。
添加回答
舉報(bào)