是否在内存中创建整个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,然后组合这些块。