它是否在内存中创建整个dataFrame?
如何创建大型数据框(> 100万行)并将其保留以供以后查询?
答案 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,然后组合这些部分。