从Pyspark数据框的列中提取文件扩展名

3

我有一个pyspark数据框,其中有一列FullPath

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

谢谢。

2个回答

4
您可以使用 pyspark.sql.functions.regexp_extract() 来提取文件扩展名:(参考链接):
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|
#+--------------------+---------+

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))

1
文件可能有多个点,例如/tmp/filename.tar.gz。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接