[英]Spark DataFrame Cache Large TempTable
我有一個帶有非常大數據框的 spark 應用程序。 我目前正在將數據幀注冊為臨時表,以便我可以對其執行多個查詢。
當我使用 RDD 時,我使用 persist(StorageLevel.MEMORY_AND_DISK()) 什么是臨時表的等價物。
下面是兩種可能性,我不認為選項 2 會起作用,因為 cacheTable 嘗試緩存在內存中,而我的表太大而無法放入內存。
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");
我怎樣才能最好地緩存我的臨時表,以便我可以對它執行多個查詢而不必不斷重新加載數據。
謝謝,內森
我剛剛查看了 Spark 1.6.1 源代碼,實際上選項 2 正是您想要的。 以下是對緩存的評論的摘錄:
...與
RDD.cache()
不同,默認存儲級別設置為MEMORY_AND_DISK
因為重新計算基礎表的內存中列表示很昂貴。
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
參考:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.