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

火花:如何同時讀取和寫入相同的鑲花的文件

olisch
新的因素

我如何讀DataFrame鋪文件,轉換和寫這個修改DataFrame回到相同的相同的鑲花文件嗎?

如果我試圖這樣做,我得到一個錯誤,這是可以理解的,因為火花讀取從源和一個不能同時寫回。讓我——再現問題

df =火花。createDataFrame([(10),(20),(30)],[‘性’,‘日期’])

#另存為拚花

df.repartition (1) .write.format(鋪).mode(覆蓋).save(…/臨時的)

#加載它

df = spark.read.format(鋪).load(…/臨時的)

#保存它——這產生錯誤

df.repartition (1) .write.format(鋪).mode(覆蓋).save(…/臨時的)

錯誤:

. io .FileNotFoundException:請求的文件maprfs: / / / mapr - 00000 /…/ temp /部分f67d5a62 - 36 - f2 - 4 - dd2 - 855 a - 846 - f422e623f c000.snappy。拚花是不存在的。它是可能的底層文件已經更新。您可以顯式地火花的緩存失效運行“REFRESH TABLE表”命令的SQL或重新創建數據集/ DataFrame參與。

一個解決方案這個問題是與不同的命名保存DataFrame鋪文件夾- >刪除舊的鑲花文件夾- >將這個新創建的拚花文件夾重命名為舊的名字。但這是非常沒有效率的方法,更不用說那些DataFrames有數十億的行。

我做了一些研究,發現,建議做一些刷新表刷新元數據,我們可以看到這裏和這裏。

誰能建議如何讀,然後寫回到同樣的拚花文件?

3回複3

RamG
新的貢獻者二世

這種方式

這是工作…

進口org.apache.spark.sql.functions._

val df = Seq ((10), (20), (30)) .toDS。toDF(“性”、“日期”)df.show (false) / /保存它

df.repartition (1) .write.format .mode(“鋪”)(“覆蓋”).save (“……/ temp”)

/ /讀回來val df1 = spark.read.format(“鋪”).load (…/ temp) val df2 = df1。withColumn(“清理”,點燃(“快速銀想清理”))

/ /下麵2是重要的步驟

緩存
顯示
迫使光行動顯示(1)有哪些文件未找到例外會. .

df2。緩存/ /緩存來避免FileNotFoundException df2.show(2) / /光行動或println (df2.count)也很好

df2.repartition (1) .write.format .mode(“鋪”)(“覆蓋”).save (“……/ temp”)

df2.show(假)

工作肯定是唯一你需要緩存和執行小行動顯示(1)這是altermative路線思想提出的強製用戶需要它。

結果……文件:閱讀和覆蓋

0693年f000007oroeaac

ManishKumarPand
新的貢獻者二世

謝謝. .它工作

saravananraju
新的貢獻者二世

你好,

您可以使用insertinto而不是節省。它將覆蓋目標文件不需要緩存或持續dataframe

Df.write.format(“鋪”).mode(“覆蓋”).insertInto (“/ file_path”)

~薩拉瓦南

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

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

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

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

Baidu
map