在Spark DataFrame SQL中获取没有路径的文件名



我有一个Spark Dataframe,其中包含通过Spark - XML解析的XML文件夹中的数据。我想添加一个包含源文件的列,这很容易通过input_file_name()函数完成。

问题是这返回整个路径,而我只想要文件名。所以我尝试在spark SQL中注册一个UDF,它提取文件名,但最后我得到一个空列。该函数工作,但显然它得到空值作为输入,我不明白为什么。

有人知道这个问题和如何解决它吗?

编辑:例子

如果我通过df.selectExpr('input_file_name()')选择filename列,那么我将获得路径和文件名。但是,如果我定义一个函数,只返回输入:

def f(path):
    return path

并通过session.udf.register('f',f)注册,再通过df.selectExpr('f(input_file_name())')选择该列,得到空列

我们可以注册一个udf,它将只返回最后一个"/"之后的部分字符串,并将此函数应用于input_file_name()的输出:

from pyspark.sql.functions import input_file_name
spark.udf.register("filename", lambda x: x.rsplit('/', 1)[-1])
df.selectExpr('filename(input_file_name()) as file') 

相关内容

  • 没有找到相关文章