Dataframe.toPandas是始终在驱动程序节点上还是在工作节点上?

时间:2016-08-25 10:16:12

标签: python hadoop pandas apache-spark pyspark

想象一下,您正在通过SparkContext和Hive加载大型数据集。因此,此数据集随后将分布在Spark群集中。例如,数千个变量的观察值(值+时间戳)。

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

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

def myFunction(data_frame):
   data_frame.toPandas()

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

1 个答案:

答案 0 :(得分:4)

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

  • 如果使用DataFrame this collects data and creates local Python object on the driver上的toPandas方法创建pyspark.sql.dataframe.DataFrame
  • 如果在执行者进程(for example in mapPartitions)内创建pandas.core.frame.DataFrame,您只需获得RDD[pandas.core.frame.DataFrame]。 Pandas对象之间没有区别,让我们说tuple
  • 最后你的例子中的伪代码无法工作,因为你无法创建(以合理的方式)Spark DataFrame(我假设你的意思是_.toDF)在执行者线程内。