Apache spark 保存Word2VecModel时超过spark.akka.frameSize
我正在使用Spark的Apache spark 保存Word2VecModel时超过spark.akka.frameSize,apache-spark,word2vec,Apache Spark,Word2vec,我正在使用Spark的Word2Vec来训练一些单词向量。培训基本上是有效的,但当涉及到保存模型时,我得到一个org.apache.spark.SparkException说: 作业因阶段失败而中止:序列化任务1278:0为1073394582字节,超出了允许的最大值:spark.akka.frameSize(134217728字节)-保留(204800字节)。考虑增加SPARK.AKKA框架或使用广播变量的大值。 堆栈跟踪指向第190行,但我可能更改了一些代码,我认为实际上是第196行导致了问
Word2Vec
来训练一些单词向量。培训基本上是有效的,但当涉及到保存模型时,我得到一个org.apache.spark.SparkException
说:
作业因阶段失败而中止:序列化任务1278:0为1073394582字节,超出了允许的最大值:spark.akka.frameSize(134217728字节)-保留(204800字节)。考虑增加SPARK.AKKA框架或使用广播变量的大值。
堆栈跟踪指向第190行,但我可能更改了一些代码,我认为实际上是第196行导致了问题:
190:val sizeGb=(model.getVectors.size*arguments.getVectorSize*4.0)/(1024*1024*1024.0);
191:
192:println(“最终词汇表字数:”+model.getVectors.size)
193:println(“输出文件大小:~“+f”$sizeGb%1.4f”+“GB”)
154:println(“将模型保存到”+输出文件路径)
195:
196:model.save(sc,outputFilePath)
根据我自己的输出,我得到了估计的模型尺寸
/(声音大小*向量大小*4)/(1024^3)=~0.9767 GB
val sizeGb=(model.getVectors.size*arguments.getVectorSize*4.0)/(1024*1024*1024.0);
接近1073394582字节。
堆栈跟踪:
org.apache.spark.SparkException: Job aborted due to stage failure: Serialized task 1278:0 was 1073394582 bytes, which exceeds max allowed: spark.akka.frameSize (134217728 bytes) - reserved (204800 bytes). Consider increasing spark.akka.frameSize or using broadcast variables for large values.
at org.apache.spark.scheduler.DAGScheduler.org$apache$spark$scheduler$DAGScheduler$$failJobAndIndependentStages(DAGScheduler.scala:1431)
at org.apache.spark.scheduler.DAGScheduler$$anonfun$abortStage$1.apply(DAGScheduler.scala:1419)
at org.apache.spark.scheduler.DAGScheduler$$anonfun$abortStage$1.apply(DAGScheduler.scala:1418)
...
at org.apache.spark.mllib.feature.Word2VecModel$SaveLoadV1_0$.save(Word2Vec.scala:617)
at org.apache.spark.mllib.feature.Word2VecModel.save(Word2Vec.scala:489)
at masterthesis.code.wordvectors.Word2VecOnCluster$.main(Word2VecOnCluster.scala:190)
at masterthesis.code.wordvectors.Word2VecOnCluster.main(Word2VecOnCluster.scala)
错误信息很清楚,但我不确定我能做些什么。另一方面,我已经保存了大于125MB(我们的默认帧大小)的模型,Spark没有抱怨
我不确定我能对此做些什么。正如您的错误日志所示,有两种方法可以做到这一点
- 通过增加
,默认大小为128MB 您可以参考,或者如果您使用的是独立的shell,则可以通过参数spark.akka.frameSize
--driver java options“-Dspark.akka.frameSize=128”
- 或者通过对大值使用
帧大小
似乎是一个糟糕的解决方案,因为它被限制为2047MB
。这里的实际问题是为什么Word2VecModel#save()
本身实际上无法做到这一点?你找到解决方案了吗?