1 回答

TA贡献1884条经验 获得超4个赞
toPandas
(PySpark)/ as.data.frame
(SparkR)
在创建本地数据框之前,必须先收集数据。例如,toPandas
方法如下所示:
def toPandas(self): import pandas as pd return pd.DataFrame.from_records(self.collect(), columns=self.columns)
您需要在每个节点上都安装有Python(最好具有所有依赖项)。
SparkR对应项(as.data.frame
)只是的别名collect
。
为了在这两种情况下的数据概括为collected
向驾驶员节点并转换到本地数据结构(pandas.DataFrame
和base::data.frame
在Python和R分别地)。
向量化的用户定义函数
由于火花2.3.0 PySpark还提供了一组pandas_udf
(SCALAR
,GROUPED_MAP
,GROUPED_AGG
),其并行地对由下式定义的数据块进行操作
在
SCALAR
变体情况下进行分区GROUPED_MAP
和的情况下的分组表达式GROUPED_AGG
。
每个块用
一种或多种
pandas.core.series.Series
(如果有SCALAR
和)GROUPED_AGG
变体。pandas.core.frame.DataFrame
如果是GROUPED_MAP
变体,则为单个。
类似地,从Spark 2.0.0开始,SparkR提供dapply
并gapply
在data.frames
分区和分组表达式分别定义的函数上运行。
上述功能:
不要收集给司机。除非数据仅包含单个分区(即带有
coalesce(1)
)或分组表达式是微不足道的(即带有),否则groupBy(lit(1))
就没有单个节点的瓶颈。将相应的块加载到相应执行器的内存中。因此,它受每个执行器上可用的单个块/内存大小的限制。
添加回答
举报