Dataframe Pyspark:序列化的任务超出了允许的最大值。考虑增加Skk.RPC.MasaG.Max大小或使用广播变量进行大值

Dataframe Pyspark:序列化的任务超出了允许的最大值。考虑增加Skk.RPC.MasaG.Max大小或使用广播变量进行大值,dataframe,pyspark,message,rpc,max-size,Dataframe,Pyspark,Message,Rpc,Max Size,我在集群上进行计算,最后用df.descripe().show()询问Spark数据帧的汇总统计信息时,我得到一个错误: 序列化任务15:0为137500581字节,超出了允许的最大值:spark.rpc.message.maxSize(134217728字节)。考虑增加SPARK.RPC.MeasAg.Max大小或使用广播变量对大值 在Spark配置中,我已尝试增加上述参数: spark = (SparkSession .builder .appName(&

我在集群上进行计算,最后用df.descripe().show()询问Spark数据帧的汇总统计信息时,我得到一个错误:

序列化任务15:0为137500581字节,超出了允许的最大值:spark.rpc.message.maxSize(134217728字节)。考虑增加SPARK.RPC.MeasAg.Max大小或使用广播变量对大值

在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


我怎样才能避免这个错误呢?

我也有同样的问题,浪费了我一生中的一天,我再也回不来了。我不知道为什么会发生这种情况,但以下是我如何让它为我工作的

步骤1:确保PYSPARK_PYTHON和PYSPARK_驱动程序_PYTHON设置正确。 事实证明,worker(2.6)中的python版本与driver(3.6)中的python版本不同。您应该检查环境变量PYSPARK_PYTHON和PYSPARK_DRIVER_PYTHON是否设置正确

我只需在Jupyter中将内核从Python3 Spark 2.2.0切换到Python Spark 2.3.1,就解决了这个问题。您可能需要手动进行设置。以下是如何确保PySpark设置正确

第2步:如果不起作用,试着解决它: 此内核开关适用于我尚未添加任何列的DFs: 火花点火->熊猫点火->返回火花点火。。。。但它在DFs上不起作用,因为我在DFs中添加了5个额外的列因此,我尝试了以下方法并取得了成功:

# 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')

希望有帮助

我也有同样的麻烦,然后我解决它。 原因是
spark.rpc.message.maxSize
如果默认设置为
128M
,您可以在启动spark客户端时更改它,我在pyspark中工作,并将该值设置为1024,因此我这样写:

pyspark --master yarn --conf spark.rpc.message.maxSize=1024

解决它。

我也有同样的问题,但使用的是Watson studio。我的解决办法是:

sc.stop()
configura=SparkConf().set('spark.rpc.message.maxSize','256')
sc=SparkContext.getOrCreate(conf=configura)
spark = SparkSession.builder.getOrCreate()

我希望它能帮助某人…

您是如何创建df的?从读取文件或python对象?这对我帮助很大!非常感谢。这个解决方案救了我。