Dataframe.toPandas 总是在驱动节点还是工作节点上?

Posted

技术标签:

【中文标题】Dataframe.toPandas 总是在驱动节点还是工作节点上?【英文标题】:is Dataframe.toPandas always on driver node or on worker nodes? 【发布时间】:2016-08-25 10:16:12 【问题描述】:

假设您正在通过 SparkContext 和 Hive 加载一个大型数据集。所以这个数据集然后分布在你的 Spark 集群中。例如,数千个变量的观察结果(值 + 时间戳)。

现在您将使用一些 map/reduce 方法或聚合来组织/分析您的数据。例如按变量名分组。

分组后,您可以将每个变量的所有观察值(值)作为时间序列数据框。如果你现在使用 DataFrame.toPandas

def myFunction(data_frame):
   data_frame.toPandas()

df = sc.load....
df.groupBy('var_name').mapValues(_.toDF).map(myFunction)
    这是否转换为每个上的 Pandas 数据帧(每个变量) 工作节点,或 Pandas Dataframes 是否总是在驱动节点上,因此数据会从工作节点传输到驱动程序?

【问题讨论】:

【参考方案1】:

在这种情况下,Pandas DataFrame 没有什么特别之处。

如果DataFrame 是通过对pyspark.sql.dataframe.DataFrame 使用toPandas 方法创建的@this collects data and creates local Python object on the driver。 如果在执行程序进程 (for example in mapPartitions) 中创建了pandas.core.frame.DataFrame,您只需得到RDD[pandas.core.frame.DataFrame]。 Pandas 对象之间没有区别,比如tuple。 最后,您示例中的伪代码无法工作,因为您无法在执行程序线程中创建(以合理的方式)Spark DataFrame(我假设这就是您所说的 _.toDF)。

【讨论】:

因此,您可以在 map 函数中使用 Pandas Dataframe API,以便在工作节点中使用其更多的 convo 敌人方法。例如,在地图步骤中仅针对该信息进行一些分析并返回结果。 是的,这是可能的,类似于 SparkR dapply。不过,获得所需的性能可能会很棘手,因此您必须平衡资源分配和并行性。 你是我的英雄。我还是个新手,但在进步。也许你可以通过that one, too 帮助我。 取决于你如何创建它,在这里查看我的答案***.com/a/47716346/843463

以上是关于Dataframe.toPandas 总是在驱动节点还是工作节点上?的主要内容,如果未能解决你的问题,请参考以下文章

Segue 不传递正确的行的索引路径总是第 0 节

perl中stat函数怎么计算文件的大小

使用模型驱动,在action中总是直接返回input视图,而用属性驱动就没事

第02节:Linux 内核驱动中的指定初始化

Jmeter学习第三节配置连接MySQL数据库

Jmeter学习第三节配置连接MySQL数据库