PySpark应用程序失败,并出现java.lang.OutOfMemoryError:Java堆空间

呼吸

我通过pycharm和pyspark shell运行spark。我堆积了这个错误:

: java.lang.OutOfMemoryError: Java heap space
    at org.apache.spark.api.python.PythonRDD$.readRDDFromFile(PythonRDD.scala:416)
    at org.apache.spark.api.python.PythonRDD.readRDDFromFile(PythonRDD.scala)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at py4j.reflection.MethodInvoker.invoke(MethodInvoker.java:231)
    at py4j.reflection.ReflectionEngine.invoke(ReflectionEngine.java:381)
    at py4j.Gateway.invoke(Gateway.java:259)
    at py4j.commands.AbstractCommand.invokeMethod(AbstractCommand.java:133)
    at py4j.commands.CallCommand.execute(CallCommand.java:79)
    at py4j.GatewayConnection.run(GatewayConnection.java:209)
    at java.lang.Thread.run(Thread.java:748)

我的代码是:

from pyspark import SparkContext, SparkConf
from pyspark.sql import HiveContext
import time

if __name__ == '__main__':

    print("Started at " + time.strftime("%H:%M:%S"))

    conf = (SparkConf()
            .setAppName("TestRdd") \
            .set('spark.driver.cores', '1') \
            .set('spark.executor.cores', '1') \
            .set('spark.driver.memory', '16G') \
            .set('spark.executor.memory', '9G'))
    sc = SparkContext(conf=conf)

    rdd = sc.parallelize(range(1000000000),100)

    print(rdd.take(10))

    print("Finished at " + time.strftime("%H:%M:%S"))

这些是最大内存设置,我可以在群集上设置。我试图将所有内存分配给1个核心以创建rdd。但是在我看来,应用程序在分发数据集之前失败了。我假设创建步骤失败。我也尝试设置各种分区100-10000。我已经计算出需要多少内存,所以有10亿个整数-大约4.5-4.7Gb的内存,比我少,但没有运气。

如何优化并强制运行我的代码?

阿尔珀 图尔克

TL; DR请勿使用parallelize外部测试和简单的实验。由于您使用Python 2.7range并不懒惰,因此您将实现多种类型的值的完整范围:

  • list调用后的Python
  • 序列化版本,以后将写入磁盘。
  • 加载在JVM上的序列化副本。

使用xrange会有所帮助,但首先不要使用parallelize(或2018年使用Python 2)。

如果要创建一系列值,请使用 SparkContext.range

range(start, end=None, step=1, numSlices=None)

创建一个包含int的新RDD,其中包含从头到尾(不包括元素)的元素,并逐步增加每个元素。可以像python的内置range()函数一样调用。如果使用单个参数调用,则将该参数解释为end,并将start设置为0。

所以在你的情况下:

rdd = sc.range(1000000000, numSlices=100)

DataFrame

from pyspark.sql import SparkSession

spark = SparkSession.builder.getOrCreate()

df = spark.range(1000000000, numPartitions=100)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

java.lang.OutOfMemoryError:Java堆空间

java.lang.OutOfMemoryError:Java堆空间

java.lang.OutOfMemoryError:Java堆空间?

PySpark:java.lang.OutofMemoryError:Java堆空间

Eclipse Java 1.8 java.lang.outofmemoryerror:Java堆空间

获取“ java.lang.OutOfMemoryError:Java堆空间”

java.lang.OutOfMemoryError:Maven中的Java堆空间

错误java.lang.OutOfMemoryError:Java堆空间

java.lang.OutOfMemoryError:带有蜂巢的Java堆空间

kafka.server.KafkaServerStartable-java.lang.OutOfMemoryError:Java堆空间

如何修复java.lang.OutOfMemoryError:Java堆空间错误?

mongo toLIst() java.lang.OutOfMemoryError: Java 堆空间

java.lang.OutOfMemoryError:Java堆空间异常

java.lang.OutOfMemoryError:大型Excel文件的Java堆空间

java.lang.OutOfMemoryError:Java堆空间Hadoop Ubuntu

水壶问题java.lang.OutOfMemoryError:Java堆空间

MetaMap java.lang.OutOfMemoryError: Java 堆空间

AWS Glue java.lang.OutOfMemoryError:Java堆空间

使用opencsv-java.lang.OutOfMemoryError:Java堆空间

严重:Java堆空间java.lang.OutOfMemoryError:Java堆空间

在Eclipse中增加堆空间:(java.lang.OutOfMemoryError)

带有java.lang.OutOfMemoryError的应用程序:Java堆空间

IntelliJ Idea提供java.lang.OutOfMemoryError:即使增加堆大小后,Java堆空间错误

如何解决java.lang.OutOfMemoryError:Java堆空间而不增加堆内存大小

OutOfMemoryError Java堆空间

java.lang.OutOfMemoryError:Java堆空间没有更多空间

“java.lang.OutOfMemoryError:Java堆空间”,同时上传1+ GB的文件在春季启动应用程序

Pyspark-java.lang.OutOfMemoryError:写入csv文件时的Java堆空间

PySpark:线程“ dag-scheduler-event-loop”中的异常java.lang.OutOfMemoryError:Java堆空间