在Spark DataFrame SQL中获取不带路径的文件名

时间:2016-11-10 10:21:46

标签: apache-spark apache-spark-sql spark-dataframe

我有一个Spark Dataframe,它通过spark-xml从解析的XML文件夹中获取数据。我想添加一个包含源文件的列,这可以通过input_file_name()函数轻松完成。

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

有谁知道这个问题以及如何解决它?

编辑:示例

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

def f(path):
    return path

并通过session.udf.register('f',f)注册,然后通过df.selectExpr('f(input_file_name())')再次选择该列,我会得到一个空列。

1 个答案:

答案 0 :(得分:0)

我们可以注册一个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')