我有一个带有 FullPath 列的 pyspark 数据框。
如何使用函数 os.path.splitext(FullPath) 提取 FullPath 列中每个条目的扩展名并将它们放入新列中?
谢谢。
请您参考如下方法:
您可以使用 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|
#+--------------------+---------+
