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

use*_*609 3 hadoop dataframe pandas apache-spark apache-spark-sql

我在Hadoop的YARN上运行Spark.这种转换如何运作?在转换之前是否会发生collect()?

另外我需要在每个从节点上安装Python和R才能使转换工作?我很难找到这方面的文件.

zer*_*323 11

toPandas(PySpark)/ as.data.frame(SparkR)

必须在创建本地数据框之前收集数据.例如,toPandas方法如下:

def toPandas(self):
    import pandas as pd
    return pd.DataFrame.from_records(self.collect(), columns=self.columns)
Run Code Online (Sandbox Code Playgroud)

您需要在每个节点上安装最佳的所有依赖项的Python.

SparkR对应(as.data.frame)只是一个别名collect.

为了在这两种情况下数据是总结collected到驱动器节点和(转换为本地数据结构pandas.DataFramebase::data.frame分别在Python和R).

矢量化用户定义的函数

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

  • SCALAR变体的分区
  • GROUPED_MAP和的情况下分组表达式GROUPED_AGG.

每个块由表示

  • 一个或多个pandas.core.series.Series的情况SCALARGROUPED_AGG变体.
  • 单一pandas.core.frame.DataFrameGROUPED_MAP变种.

同样,自Spark 2.0.0以来,SparkR提供了分别由分区和分组表达式定义的操作dapplygapply功能data.frames.

上述功能:

  • 不要收集给司机.除非数据仅包含单个分区(即with coalesce(1))或分组表达式是微不足道的(即groupBy(lit(1))),否则没有单个节点瓶颈.
  • 将相应的块加载到相应执行程序的内存中.因此,它受每个执行器上可用的单个块/内存大小的限制.