我在Hadoop的YARN上运行Spark。这种转换如何运作?在转换之前是否会发生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
到驱动程序节点并转换为本地数据结构(分别在Python和R中为pandas.DataFrame
和base::data.frame
)。
矢量化用户定义的函数
由于Spark 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))
),否则没有单个节点瓶颈。