【问题标题】:How to collect spark dataframe at each executor node?如何在每个执行程序节点收集火花数据帧?
【发布时间】:2016-04-20 02:26:42
【问题描述】:

我的应用程序读取一个大型 parquet 文件并执行一些数据提取以得到一个较小的 spark 数据框对象。该数据帧的所有内容必须出现在每个执行程序节点上,以用于下一阶段的计算。我知道我可以通过收集广播来做到这一点,就像在这个 pyspark sn-p 中一样

sc = pyspark.SparkContext()
sqlc = HiveContext(sc)

# --- register hive tables and generate spark dataframe
spark_df = sqlc.sql('sql statement')

# collect spark dataframe contents into a Pandas dataframe at the driver
global_df = spark_df.toPandas()

# broadcast Pandas dataframe to all the executor nodes
sc.broadcast(global_df)

我只是想知道:有没有更有效的方法来做到这一点?这种模式似乎使驱动节点成为瓶颈。

【问题讨论】:

    标签: spark-dataframe


    【解决方案1】:

    这取决于您需要对小型数据框做什么。如果您需要将其与大数据相连接,Spark 可以自动优化这种广播小数据帧的连接。可以广播的最大数据帧大小由 spark.sql.autoBroadcastJoinThreshold 选项配置,如文档http://spark.apache.org/docs/latest/sql-programming-guide.html#other-configuration-options

    中所述

    【讨论】:

      猜你喜欢
      • 2020-11-10
      • 1970-01-01
      • 1970-01-01
      • 2020-10-05
      • 2017-05-16
      • 1970-01-01
      • 1970-01-01
      • 2017-02-22
      • 1970-01-01
      相关资源
      最近更新 更多