根据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
我还需要做些什么吗?