取消
顯示的結果
而不是尋找
你的意思是:

有沒有一種方法來創建一個non-temporary火花和PySpark視圖嗎?

MartinB
貢獻者三世

你好,

當創建一個火花視圖使用SparkSQL(“創建視圖作為SELCT…”)違約,這種觀點non-temporary——視圖定義將生存火花會話集群以及火花。

在PySpark我可以使用DataFrame。createOrReplaceTempView或DataFrame.createOrReplaceGlobalTempView創建一個臨時DataFrame視圖。

有沒有一種方法來創建一個non-temporary視圖與火花PySparkDataFrame編程嗎?

火花。sql(“創建視圖SELCT…”)不算:winking_face:

我沒有找到一個DataFrame方法這樣做……

8回答說8

MartinB
貢獻者三世

@Jose岡薩雷斯還是@Piper威爾遜有什麼想法?

Hubert_Dudek1
尊敬的貢獻者三世

為什麼不創建管理表呢?

dataframe.write.mode (SaveMode.Overwrite) .saveAsTable(“<示例表>”)#後,我們需要數據resultDf = spark.read.table(“<示例表>”)

@Hubert杜德克,創建一個管理表意味著持久化數據幀(dataframe的內容寫入存儲)。

想象你有一個火花表(三角洲湖格式)包含原始數據。每5分鍾有新的數據附加到原始表。

我想完善原始數據:過濾,選擇特定的列和一些列轉換為一個更好的數據類型(e。g弦日期)。使用視圖可以應用這個轉換幾乎。你每次訪問視圖,數據轉換在訪問時間,但你總是當前數據從底層表。

當創建一個管理表基本上你創建一份原始表的內容轉換應用。持久化數據在性能和存儲成本。

此外,每一次,我想訪問我的“清潔”版本的數據我需要指定轉換邏輯。視圖允許我訪問我的改變原始數據不需要手動刷新或持久性。

Hubert_Dudek1
尊敬的貢獻者三世

現在我終於明白了:slightly_smiling_face:所以問題是選擇通過PySpark API創建創建視圖。

我們可以看到,在dataframe.pythat所有視圖都臨時:

https://github.com/apache/spark/blob/7d9a4fab7957086a12ba3e9e2856e20566531e3a/python/pyspark/sql/dat..。

這個PySpark API是路由Dataset.scala:

https://github.com/apache/spark/blob/master/sql/core/src/main/scala/org/apache/spark/sql/Dataset.sca..。

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 (?:-)這將是可能的。

也許有人想貢獻並創建提交:slightly_smiling_face:

歡迎來到磚社區:讓學習、網絡和一起慶祝

加入我們的快速增長的數據專業人員和專家的80 k +社區成員,準備發現,幫助和合作而做出有意義的聯係。

點擊在這裏注冊今天,加入!

參與令人興奮的技術討論,加入一個組與你的同事和滿足我們的成員。

Baidu
map