我正在集群上进行计算,最后,当我使用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
如何避免此错误?
答案 0 :(得分:2)
我也遇到麻烦,然后我解决了。
原因是spark.rpc.message.maxSize
,如果默认设置为128M
,则可以在启动Spark客户端时更改它,我正在pyspark中工作并将其值设置为1024,所以我这样写:
pyspark --master yarn --conf spark.rpc.message.maxSize=1024
解决它。
答案 1 :(得分:1)
我遇到了同样的问题,这浪费了我一生中从未有过的日子。我不确定为什么会这样,但是这就是我如何使其成功。
步骤1:确保正确设置了PYSPARK_PYTHON和PYSPARK_DRIVER_PYTHON。 事实证明,worker(2.6)中的python版本与driver(3.6)中的版本不同。您应该检查是否正确设置了环境变量PYSPARK_PYTHON和PYSPARK_DRIVER_PYTHON。
我通过在Jupyter中将我的内核从Python 3 Spark 2.2.0切换到Python Spark 2.3.1来修复了它。您可能需要手动设置。这是确保您的PySpark正确设置的方法https://mortada.net/3-easy-steps-to-set-up-pyspark.html
步骤2:如果不起作用,请尝试解决该问题: 此内核开关适用于DF,而我未在其中添加任何列: spark_df-> panda_df-> back_to_spark_df ....但是它在我添加了5个额外列的DF上不起作用。 因此,我尝试了以下工作,并且奏效了:
# 1. Select only the new columns:
df_write = df[['hotel_id','neg_prob','prob','ipw','auc','brier_score']]
# 2. Convert this DF into Spark DF:
df_to_spark = spark.createDataFrame(df_write)
df_to_spark = df_to_spark.repartition(100)
df_to_spark.registerTempTable('df_to_spark')
# 3. Join it to the rest of your data:
final = df_to_spark.join(data,'hotel_id')
# 4. Then write the final DF.
final.write.saveAsTable('schema_name.table_name',mode='overwrite')
希望有帮助!
答案 2 :(得分:0)
我有同样的问题,但使用Watson Studio。我的解决方案是:
sc.stop()
configura=SparkConf().set('spark.rpc.message.maxSize','256')
sc=SparkContext.getOrCreate(conf=configura)
spark = SparkSession.builder.getOrCreate()
我希望它可以帮助某人...