Spark SQL createDataFrame()引发OutOfMemory异常

时间:2015-07-17 09:59:40

标签: apache-spark apache-spark-sql pyspark

它是否在内存中创建整个dataFrame?

如何创建大型数据框(> 100万行)并将其保留以供以后查询?

1 个答案:

答案 0 :(得分:1)

要将其保留以供日后查询:

val sc: SparkContext = ...
val hc = new HiveContext( sc )
val df: DataFrame = myCreateDataFrameCode().
          coalesce( 8 ).persist( StorageLevel.MEMORY_ONLY_SER )
df.show()

这会将DataFrame合并到8个分区,然后再继续使用序列化。我不确定我能说出最好的分区数量,甚至可能是#34; 1"。检查StorageLevel个文档,查看其他持久性选项,例如MEMORY_AND_DISK_SER,这些选项将保留在内存和磁盘中。

在回答第一个问题时,是的,我认为Spark需要在持久化之前在内存中创建整个DataFrame。如果您正在获得OutOfMemory',那可能是关键的障碍。你不会说你是如何创造它的。也许还有一些解决方法,比如创建并将其保存在较小的部分中,通过序列化持久化到memory_and_disk,然后组合这些部分。