如何计算Spark Driver的最大结果大小

时间:2018-11-06 06:20:03

标签: apache-spark pyspark

最近,我收到一个错误,该错误超出了“ spark.driver.MaxResultSize”。我在纱线客户端模式下使用pyspark。该代码将生成随机的伪造数据以进行测试。

new_df = None
for i in range(int(2000)):
    df = spark.range(0,10000)
    temp = df.select(f.col("id").alias('user_id'), f.round(1000 * f.abs(f.randn(seed=27))).alias("duration"))
    if new_df is None:
        new_df = temp
    else:
        new_df = new_df.union(temp)

我试图将最大结果大小增加到15G以使其正常运行。我不确定为什么它需要这么多的内存。是否有关于如何计算结果集大小的指南?

1 个答案:

答案 0 :(得分:1)

所有代码都在驱动程序上执行-对我的印象不是工人。例如for和df语句。不同于通过DFReader从Hive或JDBC进行读取。

文档状态:

  

spark.driver.maxResultSize 1g默认值序列化的总大小限制   每个Spark操作(例如collect)中所有分区的结果   个字节。至少应为1M,否则应为0(无限制)。工作将被中止   如果总大小超出此限制。上限可能会导致   驱动程序中的内存不足错误(取决于spark.driver.memory和   JVM中对象的内存开销)。设置适当的限制可以保护   出现内存不足错误的驱动程序。

您可能需要查看以下指导:How to use spark to generate huge amount of random integers?how to make rdd tuple list in spark?,以便分配负载处理并增加spark.driver.maxResultSize(如果您希望收集到驱动程序)-我不会。