从Pyspark Dataframe列中提取文件扩展名

时间:2018-03-19 14:55:52

标签: python dataframe pyspark

我有一个包含FullPath列的pyspark数据框。

如何使用os.path.splitext(FullPath)函数提取FullPath列中每个条目的扩展名并将其放入新列?

感谢。

2 个答案:

答案 0 :(得分:1)

您可以pyspark.sql.functions.regexp_extract()使用extract the file extension

import pyspark.sql.functions as f
data = [
    ('/tmp/filename.tar.gz',)
]

df = sqlCtx.createDataFrame(data, ["FullPath"])
df.withColumn("extension", f.regexp_extract("FullPath", "\.[0-9a-z]+$", 0)).show()
#+--------------------+---------+
#|            FullPath|extension|
#+--------------------+---------+
#|/tmp/filename.tar.gz|      .gz|
#+--------------------+---------+

但是,如果您想使用os.path.splittext(),则需要使用udf(这将比上述选项慢):

import os
splittext = f.udf(lambda FullPath: os.path.splitext(FullPath)[-1], StringType())
df.withColumn("extension", splittext("FullPath")).show()
#+--------------------+---------+
#|            FullPath|extension|
#+--------------------+---------+
#|/tmp/filename.tar.gz|      .gz|
#+--------------------+---------+

答案 1 :(得分:0)

SQL函数模块有一个split功能,因此您可以在“。”上拆分完整路径。角色并采取最后一个元素。假设只有一个“。”在每个文件路径字符串中。

import pyspark.sql.functions as F 
myDataFrame = myDataFrame.withColumn("pathArray", F.split(myDataFrame.FullPath, ".")
myDataFrame = myDataFrame.withColumn("FileExtension", myDataFrame.pathArray.getItem(1))