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

Python 从Pyspark Dataframe列提取文件扩展名,python,dataframe,pyspark,Python,Dataframe,Pyspark,我有一个pyspark数据框,其中有一列完整路径 如何使用函数os.path.splitext(FullPath)提取FullPath列中每个条目的扩展名并将其放入新列中 谢谢。SQL函数模块中有一个拆分函数,因此您可以在“.”字符上拆分完整路径,并获取最后一个元素。假设每个文件路径字符串中只有一个“.” import pyspark.sql.functions as F myDataFrame = myDataFrame.withColumn("pathArray", F.split(myD

我有一个pyspark数据框,其中有一列
完整路径

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


谢谢。

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

import pyspark.sql.functions as F 
myDataFrame = myDataFrame.withColumn("pathArray", F.split(myDataFrame.FullPath, ".")
myDataFrame = myDataFrame.withColumn("FileExtension", myDataFrame.pathArray.getItem(1))
您可以使用:

导入pyspark.sql.f函数
数据=[
('/tmp/filename.tar.gz',)
]
df=sqlCtx.createDataFrame(数据,[“完整路径”])
df.withColumn(“扩展名”,f.regexp_extract(“完整路径”,“\.[0-9a-z]+$”,0)).show()
#+--------------------+---------+
#|全路径扩展|
#+--------------------+---------+
#|/tmp/filename.tar.gz |.gz|
#+--------------------+---------+
但是,如果要使用
os.path.splittext()
,则需要使用
udf
(这将比上面的备选方案慢):

导入操作系统
splittext=f.udf(lambda FullPath:os.path.splitext(FullPath)[-1],StringType())
df.withColumn(“扩展名”,splittext(“完整路径”)).show()
#+--------------------+---------+
#|全路径扩展|
#+--------------------+---------+
#|/tmp/filename.tar.gz |.gz|
#+--------------------+---------+

例如,该文件可能有多个类似于/tmp/filename.tar.gz的点。