J'ai une taille de fichier de 10 Go (exemple Test.txt).
J'ai écrit mon script pyspark comme ci-dessous (Test.py):
from pyspark import SparkConf
from pyspark.sql import SparkSession
from pyspark.sql import SQLContext
spark = SparkSession.builder.appName("FilterProduct").getOrCreate()
sc = spark.sparkContext
sqlContext = SQLContext(sc)
lines = spark.read.text("C:/Users/test/Desktop/Test.txt").rdd
lines.collect()
Ensuite, j'exécute le script ci-dessus à l'aide de la commande ci-dessous:
spark-submit Test.py --executor-memory 12G
Alors je reçois une erreur comme ci-dessous:
17/12/29 13:27:18 INFO FileScanRDD: Reading File path: file:///C:/Users/test/Desktop/Test.txt, range: 402653184-536870912, partition values: [empty row]
17/12/29 13:27:18 INFO CodeGenerator: Code generated in 22.743725 ms
17/12/29 13:27:44 ERROR Executor: Exception in task 1.0 in stage 0.0 (TID 1)
Java.lang.OutOfMemoryError: Java heap space
at Java.util.Arrays.copyOf(Arrays.Java:3230)
at Java.io.ByteArrayOutputStream.grow(ByteArrayOutputStream.Java:113)
at Java.io.ByteArrayOutputStream.ensureCapacity(ByteArrayOutputStream.Java:93)
at Java.io.ByteArrayOutputStream.write(ByteArrayOutputStream.Java:140)
at org.Apache.spark.util.ByteBufferOutputStream.write(ByteBufferOutputStream.scala:41)
at Java.io.ObjectOutputStream$BlockDataOutputStream.drain(ObjectOutputStream.Java:1877)
at Java.io.ObjectOutputStream$BlockDataOutputStream.setBlockDataMode(ObjectOutputStream.Java:1786)
at Java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.Java:1189)
at Java.io.ObjectOutputStream.writeObject(ObjectOutputStream.Java:348)
at org.Apache.spark.serializer.JavaSerializationStream.writeObject(JavaSerializer.scala:43)
at org.Apache.spark.serializer.JavaSerializerInstance.serialize(JavaSerializer.scala:100)
at org.Apache.spark.executor.Executor$TaskRunner.run(Executor.scala:383)
at Java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.Java:1142)
at Java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.Java:617)
at Java.lang.Thread.run(Thread.Java:745)
17/12/29 13:27:44 ERROR Executor: Exception in task 2.0 in stage 0.0 (TID 2)
Java.lang.OutOfMemoryError: Java heap space
at Java.util.Arrays.copyOf(Arrays.Java:3230)
at Java.io.ByteArrayOutputStream.grow(ByteArrayOutputStream.Java:113)
at Java.io.ByteArrayOutputStream.ensureCapacity(ByteArrayOutputStream.Java:93
S'il vous plaît laissez-moi savoir comment résoudre ce problème?
Vous pouvez essayer --conf "spark.driver.maxResultSize=20g"
. Vous devriez vérifier les configurations sur spark conf page.spark.Apache.org/docs/latest/configuration.html
.
En plus de cette réponse, j'aimerais vous suggérer de réduire le résultat de vos tâches, sinon vous pourriez avoir des problèmes avec la sérialisation.
Je vérifie que votre répertoire Apache-spark
contient le fichier Apache-spark/2.4.0/libexec/conf/spark-defaults.conf
, où 2.4.0
correspond à la version Apache-spark.
Si ce fichier n'existe pas, créez-le.
Puis insérez à la fin du fichier: spark.driver.memory 12g
.
Cela devrait résoudre sans avoir besoin de --executor-memory 12G
: il suffit de faire spark-submit Test.py
.