【发布时间】:2016-11-10 10:21:46
【问题描述】:
我有一个 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())')选择列,我得到一个空列。
【问题讨论】:
-
您能否提供可重现的代码来说明您的问题?
-
添加了一个例子。谢谢。
-
@stackoverflowthebest:你试过
df.select()而不是df.selectExpr()吗? -
它根本不起作用,甚至不能直接调用
df.select('input_file_name()')。我需要将该函数注册为 sql 函数,而不是外部注册。如果我打电话给例如df.selectExpr('f(anyothercolumn)')它与数据框中的其他列正常工作。
标签: apache-spark apache-spark-sql spark-dataframe