我有一个包含FullPath
列的pyspark数据框。
如何使用os.path.splitext(FullPath)
函数提取FullPath
列中每个条目的扩展名并将其放入新列?
感谢。
答案 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))