为了账号安全,请及时绑定邮箱和手机立即绑定

将Spark数据框转换为Pandas / R数据框的要求

将Spark数据框转换为Pandas / R数据框的要求

三国纷争 2020-02-02 14:54:05
我在Hadoop的YARN上运行Spark。这种转换如何运作?是否在转换之前进行一次collect()?我还需要在每个从属节点上安装Python和R才能使转换正常进行吗?我正在努力寻找有关此文档。
查看完整描述

1 回答

?
慕村9548890

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.DataFramebase::data.frame在Python和R分别地)。

向量化的用户定义函数

由于火花2.3.0 PySpark还提供了一组pandas_udfSCALARGROUPED_MAPGROUPED_AGG),其并行地对由下式定义的数据块进行操作

  • SCALAR变体情况下进行分区

  • GROUPED_MAP和的情况下的分组表达式GROUPED_AGG

每个块用

  • 一种或多种pandas.core.series.Series(如果有SCALAR和)GROUPED_AGG变体。

  • pandas.core.frame.DataFrame如果是GROUPED_MAP变体,则为单个。

类似地,从Spark 2.0.0开始,SparkR提供dapplygapplydata.frames分区和分组表达式分别定义的函数上运行。

上述功能:

  • 不要收集给司机。除非数据仅包含单个分区(即带有coalesce(1))或分组表达式是微不足道的(即带有),否则groupBy(lit(1))就没有单个节点的瓶颈。

  • 将相应的块加载到相应执行器的内存中。因此,它受每个执行器上可用的单个块/内存大小的限制。


查看完整回答
反对 回复 2020-02-02
  • 1 回答
  • 0 关注
  • 450 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信