dataframe - Pyspark:序列化任务超过允许的最大值。考虑增加 spark.rpc.message.maxSize 或对大值使用广播变量
问题描述
我正在对集群进行计算,最后当我使用 df.describe().show() 询问我的 Spark 数据帧的摘要统计信息时,我收到一个错误:
序列化任务 15:0 为 137500581 字节,超过了允许的最大值:spark.rpc.message.maxSize(134217728 字节)。考虑增加 spark.rpc.message.maxSize 或对大值使用广播变量
在我的 Spark 配置中,我已经尝试增加上述参数:
spark = (SparkSession
.builder
.appName("TV segmentation - dataprep for scoring")
.config("spark.executor.memory", "25G")
.config("spark.driver.memory", "40G")
.config("spark.dynamicAllocation.enabled", "true")
.config("spark.dynamicAllocation.maxExecutors", "12")
.config("spark.driver.maxResultSize", "3g")
.config("spark.kryoserializer.buffer.max.mb", "2047mb")
.config("spark.rpc.message.maxSize", "1000mb")
.getOrCreate())
我还尝试使用以下方法重新分区我的数据框:
dfscoring=dfscoring.repartition(100)
但我仍然不断收到同样的错误。
我的环境:Python 3.5、Anaconda 5.0、Spark 2
我怎样才能避免这个错误?
解决方案
我有同样的麻烦,然后我解决它。原因是spark.rpc.message.maxSize
如果默认设置128M
,您可以在启动 spark 客户端时更改它,我在 pyspark 中工作并将值设置为 1024,所以我这样写:
pyspark --master yarn --conf spark.rpc.message.maxSize=1024
解决这个问题。
推荐阅读
- python - 如何让python从列表中随机选择一些东西,如果在输入提示中输入,它将按预期显示确切的答案
- c++ - 为套接字编程动态分配内存
- javascript - 我如何使用 gatsby 和 Netlify CMS 进行数据收集
- ruby-on-rails - ARM64架构(M1芯片):无法安装pg gem(使用PostgresApp)
- python - 根据另一个数组的样本从 numpy 数组中获取样本
- postgresql - PostgreSQL - 触发 INSERT 或 UPDATE
- python - 如何找到按月分组的熊猫数据框中的最高中值?
- javascript - 对数组和 SUM 项目计数进行排序
- splunk - Splunk:列出可以访问的索引和来源
- vb.net - 在 Visual Basic 中防止自动格式化