【问题标题】:is Dataframe.toPandas always on driver node or on worker nodes?Dataframe.toPandas 总是在驱动节点还是工作节点上?
【发布时间】: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)
  1. 这是否转换为每个上的 Pandas 数据帧(每个变量) 工作节点,或
  2. Pandas Dataframes 是否总是在驱动节点上,因此数据会从工作节点传输到驱动程序?

【问题讨论】:

    标签: python hadoop pandas apache-spark pyspark


    【解决方案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 帮助我。
    • 取决于你如何创建它,在这里查看我的答案stackoverflow.com/a/47716346/843463
    猜你喜欢
    • 1970-01-01
    • 2017-01-04
    • 1970-01-01
    • 1970-01-01
    • 2013-03-15
    • 2021-07-20
    • 1970-01-01
    • 1970-01-01
    • 2011-08-06
    相关资源
    最近更新 更多