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

Mat*_*ias 2 python hadoop pandas apache-spark pyspark

想象一下,您正在通过 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)
Run Code Online (Sandbox Code Playgroud)
  1. 这是在每个工作节点上转换为 Pandas 数据帧(每个变量),还是
  2. Pandas 数据帧是否总是在驱动程序节点上,因此数据从工作节点传输到驱动程序?

zer*_*323 5

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

  • IfDataFrame是通过 usingtoPandas方法创建的,pyspark.sql.dataframe.DataFrame 它收集数据并在驱动程序上创建本地 Python 对象
  • 如果pandas.core.frame.DataFrame是在 executor 进程中创建的(例如 inmapPartitions),您只需获取RDD[pandas.core.frame.DataFrame]. Pandas 对象之间没有区别,比如说 a tuple
  • 最后,您示例中的伪代码无法工作,因为您无法在执行程序线程中创建(以合理的方式)Spark DataFrame(我假设这就是您的意思_.toDF)。