当我使用spark运行一个模型训练管道时,我产生了上面的错误
`val inputData = spark.read
.option("header", true)
.option("mode","DROPMALFORMED")
.csv(input)
.repartition(500)
.toDF("b", "c")
.withColumn("b", lower(col("b")))
.withColumn("c", lower(col("c")))
.toDF("b", "c")
.na.drop()`
val tokenizer = new Tokenizer()
.setInputCol("c")
.setOutputCol("tokens")
val cvSpec = new CountVectorizer()
.setInputCol("tokens")
.setOutputCol("features")
.setMinDF(minDF)
.setVocabSize(vocabSize)
val nb = new NaiveBayes()
.setLabelCol("bi")
.setFeaturesCol("features")
.setPredictionCol("prediction")
.setSmoothing(smoothing)
new Pipeline().setStages(Array(tokenizer, cvSpec, nb)).fit(inputData)
spark-submit--class holmes.model.building.modelbuilding/target/scala-2.11/holmes-model-building2.11-1.0.0-snapshot-7d6978.jar--master local[*]--conf spark.serializer=org.apache.spark.serializer.kryoserializer--conf spark.kryoserializer.buffer.max=2000m--conf spark.driver.maxresultsize=2g--conf spark.rpc.message.maxsize=1024--conf spark.memory.offheap.enabled=true.memory.offheap.size=50g--driver-memory=12g
oom错误由org.apache.spark.util.Collection.ExternalSorter.WritePartitionedFile(ExternalSorter.Scala:706)触发(在堆栈跟踪的底部)
日志:
Caused by: java.lang.OutOfMemoryError: Java heap space at java.lang.reflect.Array.newInstance(Array.java:75) at java.io.ObjectInputStream.readArray(ObjectInputStream.java:1897) at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1529) java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:2027) at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1535) org.apache.spark.util.collection.ExternalSorter.writePartitionedFile(ExternalSorter.scala:706)
任何建议都会很棒:)
我会尝试的事情:
1)删除spark.memory.offheap.enabled=true
并将驱动程序内存增加到框上可用内存的90%。您可能知道这一点,因为您没有设置执行程序内存,但在本地模式下,驱动程序和执行程序都运行在由驱动程序内存控制的同一进程中。我没有尝试过,但offheap
功能听起来价值有限。参考
2)一个实际的集群而不是本地模式。更多的节点显然会给你更多的RAM。
3b)如果您移动到一个集群,您可能还希望调整executors内核的数量,原因与上面提到的相同。您可以使用--executor-cores
标志来完成此操作。
4)尝试使用更多的分区。在您的示例代码中,您重新分区到500个分区,也许可以尝试1000或2000个分区?更多的分区意味着每个分区更小,内存压力更小。
我有一个文件,大小,我试图在Windows10上运行它,在DBeaver程序上使用RAM,我得到错误 我尝试了许多解决办法,但都不起作用。、、对我都不起作用。
我有一个Java控制台应用程序,它使用DOM处理大的xml文件,基本上它从数据库中获取的数据创建xml文件。现在,正如你所猜测的那样,它使用了大量的内存,但令我惊讶的是,它与糟糕的代码无关,而是与“Java堆空间没有缩小”有关。我尝试使用这些JVM参数从Eclipse运行我的应用程序: 我甚至添加了 正如您所看到的,我的应用程序在某一点上占用了约400 MB的堆空间,堆增长到约650 MB,但几秒
问题内容: 我最近在具有24个CPU和32GB RAM的服务器上使用了带有Ipython的PySpark。它仅在一台机器上运行。在我的过程中,我想收集以下代码中给出的大量数据: 当我做 它给我outOfMemory错误。。另外,此错误发生后,我无法在Spark上执行任何操作,因为它失去了与Java的连接。它给。 看起来堆空间很小。如何设置更大的限制? 编辑 : 我在运行之前尝试过的事情: 我根据此
问题内容: 我在执行多线程程序时遇到以下错误 上面的错误发生在其中一个线程中。 据我所知,堆空间仅由实例变量占用。如果这是正确的,那么为什么在运行一段时间后会出现此错误,因为在创建对象时分配了实例变量的空间。 有什么办法可以增加堆空间? 我应该对程序进行哪些更改,以使其占用更少的堆空间? 问题答案: 如果要增加堆空间,可以 -在命令行上使用。默认情况下,这些值基于JRE版本和系统配置。你可以在Ja
我面临一些关于内存问题的问题,但我无法解决它。非常感谢您的帮助。我不熟悉Spark和pyspark功能,试图读取大约5GB大小的大型JSON文件,并使用 每次运行上述语句时,都会出现以下错误: 我需要以RDD的形式获取JSON数据,然后使用SQLSpark进行操作和分析。但是我在第一步(读取JSON)本身就出错了。我知道要读取如此大的文件,需要对Spark会话的配置进行必要的更改。我遵循了Apac
我想从网页上选定的文本中提取名词,并在文本显示时突出显示它们。所以我使用OpenNLP库来解析和获取名词列表。它在java类中运行良好,没有内存问题,尽管在显示输出之前花费了6-7秒,但当我在jsp页面中运行代码时,我得到了以下错误: 根本原因 我读到的一些解决方案建议通过这样做来增加apache tomcat的堆内存大小: 所以我将其设置为-Xmx2g,但仍然会产生相同的错误。我认为我不需要修改