我有一个pyspark数据框,其中有一列FullPath
。
如何使用函数os.path.splitext(FullPath)
来提取FullPath
列中每个条目的扩展名,并将它们放入新列中?
谢谢。
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|
#+--------------------+---------+
在SQL函数模块中有一个split函数,所以你可以通过"."字符来分割你的完整路径,并取最后一个元素。假设每个文件路径字符串中只有一个"."。
import pyspark.sql.functions as F
myDataFrame = myDataFrame.withColumn("pathArray", F.split(myDataFrame.FullPath, ".")
myDataFrame = myDataFrame.withColumn("FileExtension", myDataFrame.pathArray.getItem(1))