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

為什麼@dlt。表從一個表給不同的結果,而不是一個視圖?

PrebenOlsen
新的貢獻者三世

我有一些數據在銀,我讀一個視圖使用__apply_changes函數。我在此基礎上,創建一個表,然後我想創建我的金牌,之後做一個.groupBy()和.pivot ()。轉換我的金牌並沒有給我任何錯誤消息,他們隻是沒有做。如果我創建我的金牌基於視圖而不是表,轉換完成。見底的例子。

這是我的代碼:

從pyspark.sql進口dlt。功能導入坳、concat_ws爆炸,分裂,explode_outer, posexplode, concat,點燃,expr,首先,create_map @dlt。視圖def silver_messages():“”“銀信息表”“返回spark.readStream.table @dlt (“eqs_cloud.__apply_changes_storage_silver_messages”)。視圖def groups_hierarchy_vw():““得到所有組織層次結構”“”分配= dlt.read_stream .select (“silver_messages”) (“assignedToUnit。*”) from_unit = dlt.read_stream .select (“silver_messages”) (“fromUnit。*”) to_unit = dlt.read_stream .select (“silver_messages”) (“toUnit。*”) groups_hierarchy_vw = assigned.unionByName (from_unit) .unionByName (to_unit)返回groups_hierarchy_vw @dlt。表def groups_hierarchy_tbl():返回dlt.read_stream @dlt (“groups_hierarchy_vw”)。表def groups_hierarchy_tbl_pivoted():返回(dlt.read (groups_hierarchy_tbl) .select (“id”,“名字”,(“路徑”,“/”).alias (“groups_in_path”), posexplode(分裂(“路徑”,“/”)).alias (“pos”、“價值”)).select (“id”、“名稱”concat(點燃(“集團”)、“pos”) .alias (“group_name”), expr (“groups_in_path (pos)”) .alias (val)) .groupBy .pivot (“id”、“名稱”)(“group_name”) .agg(第一(val)))

有一種方式我可以直接使用groups_hierarchy_vw視圖底部的金牌?如果我進入dlt.read_stream (“groups_hierarchy_vw”)我得到一個錯誤”pyspark.sql.utils。AnalysisException:查詢與流媒體來源必須執行writeStream.start ();“

這是一個捏造的例子你可以嚐試。

進口熊貓pyspark.sql pd。功能導入坳、concat_ws爆炸,分裂,explode_outer, posexplode, concat,點燃,expr,首先,create_map pdf = pd。DataFrame ({" id ":[“1001”、“1002”、“1003”),“名字”:[“Dep1”、“Dep2”,“Dep3”),“路徑”:[“1001”,“1001/1002”,“1001/1002/1003”)})df = spark.createDataFrame (pdf) df.write.mode(覆蓋).saveAsTable @dlt (“fabricated_testtable”)。視圖def fabricated_hierarchy_vw():返回spark.read.table @dlt (“fabricated_testtable”)。表def fabricated_tbl_pivoted():返回(dlt.read (fabricated_hierarchy_vw) .select (“id”,“名字”,(“路徑”,“/”).alias (“groups_in_path”), posexplode(分裂(“路徑”,“/”)).alias (“pos”、“價值”)).select (“id”、“名稱”concat(點燃(“集團”)、“pos”) .alias (“group_name”), expr (“groups_in_path (pos)”) .alias (val)) .groupBy .pivot (“id”、“名稱”)(“group_name”) .agg(第一(val)))

這給預期的結果:

圖像

但如果你改變@dlt第12行。表,轉換不執行,結果是這樣的:

圖像

1接受解決方案

接受的解決方案

PrebenOlsen
新的貢獻者三世

我發現了一個臨時的解決辦法來解決這個問題。

.pivot (“columnName”)應該自動抓取所有能找到的值,但出於某種原因,它不。我需要指定的值,使用

.pivot (“group_name”、“group0”、“group1”、“group2”……)

.pivot (“group_name”,“{}”.format(我)我的範圍(8)))

在原帖子查看解決方案

1回複1

PrebenOlsen
新的貢獻者三世

我發現了一個臨時的解決辦法來解決這個問題。

.pivot (“columnName”)應該自動抓取所有能找到的值,但出於某種原因,它不。我需要指定的值,使用

.pivot (“group_name”、“group0”、“group1”、“group2”……)

.pivot (“group_name”,“{}”.format(我)我的範圍(8)))

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

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

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

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

Baidu
map