我有一個奇怪的行為與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文件隻包含一個數據的發生。
如果有人可以告訴我我做錯了什麼,這將是很大的幫助
我掛載一個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,“引用”)
非常感謝,似乎禁用extra_cat_name(類別)udf修改副本,但是我不懂為什麼,如果你有一個主意