你好,
當創建一個火花視圖使用SparkSQL(“創建視圖作為SELCT…”)違約,這種觀點non-temporary——視圖定義將生存火花會話集群以及火花。
在PySpark我可以使用DataFrame。createOrReplaceTempView或DataFrame.createOrReplaceGlobalTempView創建一個臨時DataFrame視圖。
有沒有一種方法來創建一個non-temporary視圖與火花PySparkDataFrame編程嗎?
火花。sql(“創建視圖SELCT…”)不算
我沒有找到一個DataFrame方法這樣做……
@Hubert杜德克,創建一個管理表意味著持久化數據幀(dataframe的內容寫入存儲)。
想象你有一個火花表(三角洲湖格式)包含原始數據。每5分鍾有新的數據附加到原始表。
我想完善原始數據:過濾,選擇特定的列和一些列轉換為一個更好的數據類型(e。g弦日期)。使用視圖可以應用這個轉換幾乎。你每次訪問視圖,數據轉換在訪問時間,但你總是當前數據從底層表。
當創建一個管理表基本上你創建一份原始表的內容轉換應用。持久化數據在性能和存儲成本。
此外,每一次,我想訪問我的“清潔”版本的數據我需要指定轉換邏輯。視圖允許我訪問我的改變原始數據不需要手動刷新或持久性。
現在我終於明白了所以問題是選擇通過PySpark API創建創建視圖。
我們可以看到,在dataframe.pythat所有視圖都臨時:
這個PySpark API是路由Dataset.scala:
在Dataset.scala我們可以看到應該rebuild-ed條件。它是不允許PersistedView
val viewType =如果其他(全球)GlobalTempView LocalTempView
應該是類似的SparkSqlParser.scala
如果(ctx val viewType =。其他臨時= = null) {PersistedView}如果(ctx)。其他全球! = null) {GlobalTempView} {LocalTempView}
所以:
1)
私人def createTempViewCommandDataset.scala需要額外viewType參數而應該重命名(已經添加了名稱是錯誤的,因全球)
2)比的函數,如createGlobalPersistantCommand等它被添加Dataset.scala
3)比德fcreateGlobalPersistantView等可以被添加到dataframe.py
在火花後X (?:-)這將是可能的。
也許有人想貢獻並創建提交