Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache spark 保存Word2VecModel时超过spark.akka.frameSize_Apache Spark_Word2vec - Fatal编程技术网

Apache spark 保存Word2VecModel时超过spark.akka.frameSize

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行导致了问

我正在使用Spark的
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没有抱怨


我不确定我能对此做些什么。

正如您的错误日志所示,有两种方法可以做到这一点

  • 通过增加
    spark.akka.frameSize
    ,默认大小为128MB

    您可以参考,或者如果您使用的是独立的shell,则可以通过参数
    --driver java options“-Dspark.akka.frameSize=128”

  • 或者通过对大值使用


设置
帧大小
似乎是一个糟糕的解决方案,因为它被限制为
2047MB
。这里的实际问题是为什么
Word2VecModel#save()
本身实际上无法做到这一点?你找到解决方案了吗?