我們通過這種命令從 ADLS 讀取檔案:
relative_path = "ContainerName/"
input_file_name = "ss_old_data_Amazon_Blast_202211093837474.csv"
我們如何從要處理的檔案名中獲取子字串。
For example:
1st filename: vm_Path_Accenture_Complex_Union_202211027373.csv
2nd filename: vm_path_Google_is_a_good_company_20221109473.csv
3rd filename: ss_old_data_Amazon_Blast_202211093837474.csv
我們需要從檔案名中選擇特定的子字串并_從子字串中洗掉并使其大寫。我不需要選擇日期格式(數字)或.csv- 只需選擇公司名稱。
vm_path大多數檔案會在開頭出現,有時ss_old_data. 我們也需要洗掉這部分。
Expected output:
1st filename should become: ACCENTURECOMPLEXUNION
2nd filename should become: GOOGLEISAGOODCOMPANY
3rd filename should become: AMAZONBLAST
我們如何在 PySpark 中實作它?
uj5u.com熱心網友回復:
由于您將檔案名存盤在變數中,因此您可以重復使用它并將其保存為文字 ( lit)。但在保存之前,您必須對文字進行一些修改。
ss_old_data_Amazon_Blast_202211093837474.csv<- 輸入
_Amazon_Blast<- 應用regexp_extract模式后 <-'(?i)(vm_path|ss_old_data)(. )_'
AmazonBlast應用后translate(..., '_', '')
AMAZONBLAST<- 應用后upper
from pyspark.sql import functions as F
input_file_name ="ss_old_data_Amazon_Blast_202211093837474.csv"
df = spark.read.csv(input_file_name)
df = df.withColumn('file_name', F.lit(input_file_name))
c = F.regexp_extract('file_name', '(?i)(vm_path|ss_old_data)(. )_', 2)
df = df.withColumn('file_name', F.upper(F.translate(c, '_', '')))
df.show()
# ---------- -----------
# | _c0| file_name|
# ---------- -----------
# |csv_line_1|AMAZONBLAST|
# |csv_line_2|AMAZONBLAST|
# ---------- -----------
uj5u.com熱心網友回復:
一種方法使用對 的兩個鏈式呼叫str.replace,然后是對 的呼叫str.upper:
df["output"] = df["filename"].str.replace(r'^(?:vm_path|ss_old_data)_|_\d \.csv$', '', regex=True, flags=re.I)
.str.replace('_', '', regex=False)
.str.upper()
這是一個正則運算式演示,顯示初始替換邏輯正在運行。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/526105.html
