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

不一致的複製行用火花(磚在Azure女士)

whatthespark
新的貢獻者二世

我有一個奇怪的行為與Apache火花,我運行一個Python筆記本在Azure磚。我有一個dataframe一些數據,2列的興趣:名稱和ftime

我發現我有重複值,有時沒有,這取決於我取數據:

df.where(坳('名稱')= = '測試')。(坳(ftime) = = ' 2022-07-18 ') .count() #結果是1

但當我運行

len (df.where(坳('名稱')= = '測試')。(坳(ftime) = = ' 2022-07-18 ') .collect()) #結果是2

我現在有2的結果行,這是完全相同的。這兩個細胞是跑一個接一個,順序並不能改變什麼。

我試著創建一個臨時視圖的火花

df.createOrReplaceTempView (“df_referential”)

但我運行在相同的問題:

選擇名稱、ftime COUNT(*)從df_referential組的名字,ftime COUNT (*) > 1

不返回任何結果,

SELECT * FROM df_referential name = '測試'和ftime = ' 2022-07-18 '

返回兩行,完全相同。

如果我試著

df.filter(坳('名稱')= = '測試')&(坳(ftime) = = ' 2022-07-18 ')),告訴()

我有2行,完全相同,但是

df.filter(坳('名稱')= = '測試')&(坳(ftime) = = ' 2022-07-18 '))。選擇(“名字”,“ftime”),告訴()

隻給了一行

我很難理解為什麼會這樣。我希望這些隻返回一行,和讀取數據的JSON文件隻包含一個數據的發生。

如果有人可以告訴我我做錯了什麼,這將是很大的幫助

4回複4

werners1
尊敬的貢獻者三世

我希望看到你如何創建df dataframe。

在pyspark可以得到奇怪的結果如果不明確的狀態,或者當你重用dataframe名字。

whatthespark
新的貢獻者二世

我掛載一個AZ blob存儲

試一試:dbutils.fs。山(源= " wasbs: / /(電子郵件保護)”,mount_point = " / mnt /客戶端”,extra_configs = {“fs.azure.account.key。”+ storage_account_name +“.blob.core.windows.net”: storage_account_access_key})除了異常e:通過

然後我加載數據的JSON文件:

從pyspark。sql導入類型def extra_cat_name(類別):“”提取類別名稱、處理不同類型共存的事實,因為數據遷移”“真= true假= false null =沒有如果isinstance(類別,str):類別= eval(類別)嚐試:返回[類別(' translatedNames '][0]['翻譯']]除了異常e: cat_extract = spark.udf返回類別。注冊(“cat_extract extra_cat_name types.ArrayType (types.StringType ())) def add_time_from_filename (df、指標):“”添加一個時間戳列提取文件名:param df: dataframe工作:參數指標:在文件名前的最後一句話“”“返回df \ .withColumn (file_name, F.input_file_name ()) \ .withColumn (regtime, F。regexp_extract (' file_name ' f '(_{指示器}_)(. *)(\ . json), 2)) \ .withColumn (ftime, F.to_date(坳(“regtime”)、“yyyy_MM_dd”)) \ def load_data (): referential_files = f“/ mnt /客戶/ {GIVEN_CLIENT_NAME} / internal_api / referential_data / *。json user_files = f“/ mnt /客戶/ {GIVEN_CLIENT_NAME} / internal_api / users_data / *。json " df_users = spark.read.json (user_files) df = spark.read.json (referential_files) \ .withColumn(“數據”,F.explode(“技能”)).select(數據。*)\ .withColumn(“類別”,cat_extract(類別))df = add_time_from_filename (df,“引用”)

werners1
尊敬的貢獻者三世

所以每次你做一個動作,你的df的代碼執行。

我猜想如果你明確的兩個細胞之間的狀態,問題消失了。

或者試圖分配一個新的dataframe

“引用”df2 = add_time_from_filename (df)

whatthespark
新的貢獻者二世

非常感謝,似乎禁用extra_cat_name(類別)udf修改副本,但是我不懂為什麼,如果你有一個主意

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

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

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

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

Baidu
map