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

Python Dataframe.topanda始终在驱动程序节点上还是在工作节点上?,python,hadoop,pandas,apache-spark,pyspark,Python,Hadoop,Pandas,Apache Spark,Pyspark,假设您正在通过SparkContext和配置单元加载一个大型数据集。因此,该数据集将分布在Spark集群中。例如,数千个变量的观察值(值+时间戳) 现在,您可以使用一些map/reduce方法或聚合来组织/分析数据。例如,按变量名分组 分组后,可以将每个变量的所有观察值(值)作为timeseries数据帧获取。如果现在使用DataFrame.toPandas def myFunction(data_frame): data_frame.toPandas() df = sc.load...

假设您正在通过SparkContext和配置单元加载一个大型数据集。因此,该数据集将分布在Spark集群中。例如,数千个变量的观察值(值+时间戳)

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

分组后,可以将每个变量的所有观察值(值)作为timeseries数据帧获取。如果现在使用DataFrame.toPandas

def myFunction(data_frame):
   data_frame.toPandas()

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

  • 在这种情况下,熊猫
    数据帧
    没有什么特别之处

    • 如果使用
      pyspark.sql.DataFrame.DataFrame
      上的
      toPandas
      方法创建了
      DataFrame
    • 如果在executor进程()内创建了
      pandas.core.frame.DataFrame
      ,则只需获得
      RDD[pandas.core.frame.DataFrame]
      。熊猫对象和元组之间没有区别
    • 最后,您的示例中的伪代码无法工作,因为您无法(以合理的方式)在executor线程内创建Spark
      数据帧(我假设这就是您所说的
      ..toDF

    在这种情况下,熊猫
    数据帧没有什么特别之处

    • 如果使用
      pyspark.sql.DataFrame.DataFrame
      上的
      toPandas
      方法创建了
      DataFrame
    • 如果在executor进程()内创建了
      pandas.core.frame.DataFrame
      ,则只需获得
      RDD[pandas.core.frame.DataFrame]
      。熊猫对象和元组之间没有区别
    • 最后,您的示例中的伪代码无法工作,因为您无法(以合理的方式)在executor线程内创建Spark
      数据帧(我假设这就是您所说的
      ..toDF

    因此,您可以在map函数中使用Pandas Dataframe API,以便在worker节点中使用其更多的方法。例如,在映射步骤中仅对该信息进行一些分析并返回结果。是的,这是可能的,类似于SparkR
    dapply
    。但是,要获得理想的性能可能很棘手,因此您必须平衡资源分配和并行性。您是我的英雄。我还是个新手,但正在进步。也许你可以帮助我。取决于你是如何创建它的,请看我的答案,这样你就可以在map函数中使用Pandas Dataframe API,甚至在worker节点中使用它更多的Conva方法。例如,在映射步骤中仅对该信息进行一些分析并返回结果。是的,这是可能的,类似于SparkR
    dapply
    。但是,要获得理想的性能可能很棘手,因此您必须平衡资源分配和并行性。您是我的英雄。我还是个新手,但正在进步。也许你可以帮我。取决于你如何创造它,在这里看到我的答案