Apache spark Spark数据帧缓存大容量
我有一个spark应用程序,它有一个非常大的数据帧。我目前正在将dataframe注册为一个诱人的对象,以便可以对其执行多个查询 当我使用RDD时,我使用persist(StorageLevel.MEMORY_和_DISK()),这是一个诱人的应用程序的等价物 下面是两种可能性,我认为选项2不起作用,因为cacheTable试图在内存中缓存,而我的表太大,无法放入内存Apache spark Spark数据帧缓存大容量,apache-spark,dataframe,apache-spark-sql,rdd,Apache Spark,Dataframe,Apache Spark Sql,Rdd,我有一个spark应用程序,它有一个非常大的数据帧。我目前正在将dataframe注册为一个诱人的对象,以便可以对其执行多个查询 当我使用RDD时,我使用persist(StorageLevel.MEMORY_和_DISK()),这是一个诱人的应用程序的等价物 下面是两种可能性,我认为选项2不起作用,因为cacheTable试图在内存中缓存,而我的表太大,无法放入内存 DataFrame standardLocationRecords = inputReader.readAsDataFr
DataFrame standardLocationRecords = inputReader.readAsDataFrame(sc, sqlc);
// Option 1 //
standardLocationRecords.persist(StorageLevel.MEMORY_AND_DISK());
standardLocationRecords.registerTempTable("standardlocationrecords");
// Option 2 //
standardLocationRecords.registerTempTable("standardlocationrecords");
sqlc.cacheTable("standardlocationrecords");
我怎样才能最好地缓存我的数据,这样我就可以对它执行多个查询,而不必不断地重新加载数据
谢谢,
Nathan我刚刚看过Spark 1.6.1的源代码,实际上选项2就是您想要的。以下是关于缓存的评论摘录: 。。。与
RDD.cache()
不同,默认存储级别设置为
内存和磁盘
因为重新计算内存列
基础表的表示形式非常昂贵
参考:
def cacheTable(tableName: String): Unit = {
cacheManager.cacheQuery(table(tableName), Some(tableName))
}
private[sql] def cacheQuery(
query: Queryable,
tableName: Option[String] = None,
storageLevel: StorageLevel = MEMORY_AND_DISK): Unit