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 敌人方法。例如,在地图步骤中仅针对该信息进行一些分析并返回结果。 是的,这是可能的,类似于 SparkRdapply
。不过,获得所需的性能可能会很棘手,因此您必须平衡资源分配和并行性。
你是我的英雄。我还是个新手,但在进步。也许你可以通过that one, too 帮助我。
取决于你如何创建它,在这里查看我的答案***.com/a/47716346/843463以上是关于Dataframe.toPandas 总是在驱动节点还是工作节点上?的主要内容,如果未能解决你的问题,请参考以下文章