将 Spark 数据帧转换为 Pandas/R 数据帧的要求
Requirements for converting Spark dataframe to Pandas/R dataframe
我是 运行 Spark on Hadoop 的 YARN。这种转换是如何进行的? collect() 是否在转换之前发生?
我还需要在每个从属节点上安装 Python 和 R 才能进行转换吗?我正在努力寻找这方面的文档。
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
到driver节点并转换为本地数据结构(pandas.DataFrame
和base::data.frame
在Python和 R)。
矢量化用户定义函数
自Spark 2.3.0 PySpark还提供了一组pandas_udf
(SCALAR
, GROUPED_MAP
, GROUPED_AGG
)它在
定义的数据块上并行操作
- 分区以防
SCALAR
变体
GROUPED_MAP
和 GROUPED_AGG
情况下的分组表达式。
每个块由
表示
- 如果是
SCALAR
和 GROUPED_AGG
变体,一个或多个 pandas.core.series.Series
。
- 单个
pandas.core.frame.DataFrame
如果 GROUPED_MAP
变体。
类似地,自 Spark 2.0.0,SparkR 提供了 dapply
and gapply
函数,这些函数分别在由分区和分组表达式定义的 data.frames
上运行。
上述功能:
- 不要收集到driver。除非数据仅包含单个分区(即
coalesce(1)
)或分组表达式很简单(即 groupBy(lit(1))
),否则不存在单节点瓶颈。
- 在相应执行器的内存中加载相应的块。因此,它受到每个执行程序上可用的单个块/内存大小的限制。
我是 运行 Spark on Hadoop 的 YARN。这种转换是如何进行的? collect() 是否在转换之前发生?
我还需要在每个从属节点上安装 Python 和 R 才能进行转换吗?我正在努力寻找这方面的文档。
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
到driver节点并转换为本地数据结构(pandas.DataFrame
和base::data.frame
在Python和 R)。
矢量化用户定义函数
自Spark 2.3.0 PySpark还提供了一组pandas_udf
(SCALAR
, GROUPED_MAP
, GROUPED_AGG
)它在
- 分区以防
SCALAR
变体 GROUPED_MAP
和GROUPED_AGG
情况下的分组表达式。
每个块由
表示- 如果是
SCALAR
和GROUPED_AGG
变体,一个或多个pandas.core.series.Series
。 - 单个
pandas.core.frame.DataFrame
如果GROUPED_MAP
变体。
类似地,自 Spark 2.0.0,SparkR 提供了 dapply
and gapply
函数,这些函数分别在由分区和分组表达式定义的 data.frames
上运行。
上述功能:
- 不要收集到driver。除非数据仅包含单个分区(即
coalesce(1)
)或分组表达式很简单(即groupBy(lit(1))
),否则不存在单节点瓶颈。 - 在相应执行器的内存中加载相应的块。因此,它受到每个执行程序上可用的单个块/内存大小的限制。