Spark core支持原始存储和序列化RDD缓存。
这篇好文章解释了这一点。
如果你使用persist
-,你可以指定任何级别的缓存,但如果你使用cache
,你只能默认使用MEMORY_ONLY
,根据这个问题没有序列化。
有人知道如何在SparkSQL中使用MEMORY_ONLY_SER
缓存吗?cacheTable(my_table)
将缓存与MEMORY_ONLY
选项,而不是MEMORY_ONLY_SER
,即使我有spark.storage。在spark环境中,StorageLevel=MEMORY_ONLY_SER .
我的目标是使用SparkSQL的序列化表缓存。什么好主意吗?
尝试如下:
Java:Option<String> tableName = new Some<String>("MyTable");
hiveContext.cacheManager().cacheQuery(hiveContext.table(tableName.get()), tableName, StorageLevel.MEMORY_ONLY_SER());
Scala :
...cacheQuery(sqlContext.table(tableName), Some(tableName), MEMORY_ONLY_SER)
Spark 1.3.0+:
参见1.3.1分支代码
参见1.5.1分支代码(validate with hiveContext.isCached(tableName)
)