Spark SQL createDataFrame()引发OutOfMemory异常



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

如何创建一个大的dataFrame(> 100万行)并将其持久化以供以后查询?

为以后的查询保留它:

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

这将在序列化之前将DataFrame合并到8个分区。我不确定我能说多少个分区是最好的,甚至可能是"1"。查看StorageLevel docs中的其他持久化选项,例如MEMORY_AND_DISK_SER,它将持久化到内存和磁盘中。

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

相关内容

  • 没有找到相关文章

最新更新