您能否告訴我如何使用 pyspark 將 url 列轉換為 Dataframe 中的輸出列行。
轉換規則:
- 將 https 替換為 abfss
- 將“blob.core.windows.net”替換為 dfs.core.windows.net
- 提取第三個'/'和最后一個'/'之間的文本, '@' 第二個'/'和'.'之間的文本 剩余字串。
從 pyspark.sql 匯入行
lst = [Row(url='https://inputfile.blob.core.windows.net/inputstorage/AvailabilityZones_1.csv', \
output='abfss://[email protected]/AvailabilityZones_1.csv'), \
Row(url='https://inputfile.blob.core.windows.net/inputstorage/AvailabilityZones_2.csv', \
output='abfss://[email protected]/AvailabilityZones_2.csv'), \
Row(url='https://inputfile.blob.core.windows.net/inputstorage/newfolder/AvailabilityZones_3.csv', \
output='abfss://inputstorage/[email protected]/AvailabilityZones_3.csv')]
df= spark.createDataFrame(lst)
預期資料幀如下: 預期輸出
uj5u.com熱心網友回復:
既然沒人回答,那我自己回答。
from pyspark.sql.functions import col, udf
def parseurl(url):
fin_url=""
url = url.replace('https://', 'abfss://')
url = url.replace('blob.core.windows.net', 'dfs.core.windows.net')
arr = url.split('/')
sub_arr = []
for pos in range(4,len(arr)-1):
sub_arr.append(arr[pos])
subFolder = ""
if len(sub_arr)>0:
subFolder = "/".join(str(x) for x in sub_arr)
if subFolder != "":
fin_url = url[:8] arr[3] '/' subFolder '@' arr[2] '/' arr[-1]
else:
fin_url = url[:8] arr[3] '/' subFolder '@' arr[2] '/' arr[-1]
return fin_url
urlUDF = udf(lambda z: parseurl(z))
df.select(col("url"), \
urlUDF(col("url")).alias("fin_url") ) \
.show(truncate=False)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/486901.html
