python - Spark 引发 OutOfMemoryError

标签 python apache-spark

当我如下运行我的 spark python 代码时:

import pyspark
conf = (pyspark.SparkConf()
     .setMaster("local")
     .setAppName("My app")
     .set("spark.executor.memory", "512m"))
sc = pyspark.SparkContext(conf = conf)        #start the conf
data =sc.textFile('/Users/tsangbosco/Downloads/transactions')
data = data.flatMap(lambda x:x.split()).take(all)

文件大约20G,我的电脑有8G内存,当我在独立模式下运行程序时,它引发了OutOfMemoryError:

Exception in thread "Local computation of job 12" java.lang.OutOfMemoryError: Java heap space
    at org.apache.spark.api.python.PythonRDD$$anon$1.read(PythonRDD.scala:131)
    at org.apache.spark.api.python.PythonRDD$$anon$1.next(PythonRDD.scala:119)
    at org.apache.spark.api.python.PythonRDD$$anon$1.next(PythonRDD.scala:112)
    at scala.collection.Iterator$class.foreach(Iterator.scala:727)
    at org.apache.spark.api.python.PythonRDD$$anon$1.foreach(PythonRDD.scala:112)
    at scala.collection.generic.Growable$class.$plus$plus$eq(Growable.scala:48)
    at scala.collection.mutable.ArrayBuffer.$plus$plus$eq(ArrayBuffer.scala:103)
    at scala.collection.mutable.ArrayBuffer.$plus$plus$eq(ArrayBuffer.scala:47)
    at scala.collection.TraversableOnce$class.to(TraversableOnce.scala:273)
    at org.apache.spark.api.python.PythonRDD$$anon$1.to(PythonRDD.scala:112)
    at scala.collection.TraversableOnce$class.toBuffer(TraversableOnce.scala:265)
    at org.apache.spark.api.python.PythonRDD$$anon$1.toBuffer(PythonRDD.scala:112)
    at scala.collection.TraversableOnce$class.toArray(TraversableOnce.scala:252)
    at org.apache.spark.api.python.PythonRDD$$anon$1.toArray(PythonRDD.scala:112)
    at org.apache.spark.api.java.JavaRDDLike$$anonfun$1.apply(JavaRDDLike.scala:259)
    at org.apache.spark.api.java.JavaRDDLike$$anonfun$1.apply(JavaRDDLike.scala:259)
    at org.apache.spark.SparkContext$$anonfun$runJob$4.apply(SparkContext.scala:884)
    at org.apache.spark.SparkContext$$anonfun$runJob$4.apply(SparkContext.scala:884)
    at org.apache.spark.scheduler.DAGScheduler.runLocallyWithinThread(DAGScheduler.scala:681)
    at org.apache.spark.scheduler.DAGScheduler$$anon$1.run(DAGScheduler.scala:666)

spark 无法处理比我的 ram 大的文件吗?你能告诉我如何解决吗?

最佳答案

Spark 可以处理一些情况。但是您正在使用 take 强制 Spark 将所有数据提取到一个数组(在内存中)。在这种情况下,您应该将它们存储到文件中,例如使用 saveAsTextFile

如果您有兴趣查看一些数据,可以使用sampletakeSample

关于python - Spark 引发 OutOfMemoryError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23601607/

相关文章:

java - 将列表拆分为子列表并将它们一一传递到算法中

python - 将 pyspark 字符串转换为日期格式

python - 为什么我调用task_done()后队列仍然加入?

java - 将 Spark Java 转换为 Spark scala

neo4j - Windows中的Neo4j Mazerunner逐步安装指南

apache-spark - 对象 DataFrame 不是包 org.apache.spark.sql 的成员

python - 使用 dask 分布式时 OMP_NUM_THREADS 出错

python - 使用傅立叶分析进行时间序列预测

python - 使用 TimeGrouper 进行 Pandas 时间序列分组

python - 如何使用存储在变量中的值作为案例模式?