簡體   English   中英

將文件名拆分為 pyspark dataframe 的不同列

[英]Split file name into different columns of pyspark dataframe

我正在使用 pyspark SQL function input_file_name 將輸入文件名添加為 Z6A5507DB3CDF47549。

df = df.withColumn("filename",input_file_name())

該列現在具有如下值。 “abc://dev/folder1/date=20200813/id=1”

從上面的列中,我必須創建 2 個不同的列。

  1. 日期
  2. ID

我必須從上面的文件名中只獲取日期和 id 並將其填充到上面提到的列中。

我可以使用 split_col 並得到它。 但是,如果文件夾結構發生變化,則可能會出現問題。

有沒有辦法檢查文件名是否包含字符串“date”和“id”,並獲取等於符號之后的值並將其填充兩個新列?

下面是預期的 output。

filename                             date     id
abc://dev/folder1/date=20200813/id=1 20200813 1

您可以將regexp_extract與查看date=id=子字符串的模式一起使用:

df = sc.parallelize(['abc://dev/folder1/date=20200813/id=1', 
                     'def://dev/folder25/id=3/date=20200814'])\
       .map(lambda l: Row(file=l)).toDF()
+-------------------------------------+
|file                                 |
+-------------------------------------+
|abc://dev/folder1/date=20200813/id=1 |
|def://dev/folder25/id=3/date=20200814|
+-------------------------------------+
df = df.withColumn('date', f.regexp_extract(f.col('file'), '(?<=date=)[0-9]+', 0))\
       .withColumn('id', f.regexp_extract(f.col('file'), '(?<=id=)[0-9]+', 0))
df.show(truncate=False)

哪個輸出:

+-------------------------------------+--------+---+
|file                                 |date    |id |
+-------------------------------------+--------+---+
|abc://dev/folder1/date=20200813/id=1 |20200813|1  |
|def://dev/folder25/id=3/date=20200814|20200814|3  |
+-------------------------------------+--------+---+

我已經使用 withcolumn 和 split 通過將列值創建為同一數據集中的列來將列值分解為日期和 id,代碼片段如下:

from pyspark.sql.types import StructType,StructField, StringType, IntegerType
adata = [("abc://dev/folder1/date=20200813/id=1",)]
aschema = StructType([StructField("filename",StringType(),True)])
adf = spark.createDataFrame(data=adata,schema=aschema)
bdf = adf.withColumn('date',  split(adf['filename'],'date=').getItem(1)[0:8]).withColumn('id',split(adf['filename'],'id=').getItem(1))
bdf.show(truncate=False)

輸出到:

+------------------------------------+--------+---+
|filename                            |date    |id |
+------------------------------------+--------+---+
|abc://dev/folder1/date=20200813/id=1|20200813|1  |
+------------------------------------+--------+---+

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM