Apache Spark SQL结果不会溢出到磁盘,从而耗尽了Java堆空间

时间:2016-06-20 20:32:30

标签: apache-spark pyspark pyspark-sql

根据Spark FAQ:

  

我的数据是否需要适合内存才能使用Spark?

     

没有。如果Spark的数据不适合内存,它会将数据溢出到磁盘,   允许它在任何大小的数据上运行良好。同样,缓存的数据集   不适合内存的内容要么溢出到磁盘,要么重新计算   需要的时候,由RDD的存储级别确定。

我正在查询一个包含5000万条目的大表。初始数据下载不适合RAM,因此Spark应该溢出到磁盘,对吗?我从这些条目中筛选出少量条目,这些条目将适合RAM。

SPARK_CLASSPATH=postgresql-9.4.1208.jre6-2.jar ./bin/pyspark --num-executors 4

url = \
  "jdbc:postgresql://localhost:5432/mydatabase?user=postgres"

df = sqlContext \
  .read \
  .format("jdbc") \
  .option("url", url) \
  .option("dbtable", "accounts") \
  .option("partitionColumn", "id") \
  .option("numPartitions", 10) \
  .option("lowerBound", 1) \
  .option("upperBound", 50000000) \
  .option("password", "password") \
  .load()

# get the small number of accounts whose names contain "taco"
results = df.map(lambda row: row["name"]).filter(lambda name: "taco" in name).collect()

我看到一些查询在Postgres服务器上运行,然后完成,pyspark由于Java后端崩溃而崩溃。 java.lang.OutOfMemoryError: Java heap space

我还需要做些什么吗?

0 个答案:

没有答案