最近,我收到一个错误,该错误超出了“ 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以使其正常运行。我不确定为什么它需要这么多的内存。是否有关于如何计算结果集大小的指南?
答案 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(如果您希望收集到驱动程序)-我不会。