我正在尝试使用如下所示的spark-xml来读取文件夹中的所有文件:
val df = sparkSession
.read
.format("com.databricks.spark.xml")
.schema(customSchema)
.option("rootTag", "Transactions")
.option("rowTag", "Transaction")
.load("/Users/spark/Desktop/sample")
在示例文件夹中,有大量的xml文件。
基于我提供的customSchema,每个文件将根据#of transaction标签变为1..n行。但我想要的还包括将xml文件名作为每个记录的额外列。
我搜索了spark-xml github选项,但似乎没有理想的结果。
请提出建议或者我可以使用不同的方法实现目标吗?
谢谢,
答案 0 :(得分:1)
您可以使用 input_file_name()
函数并在读取时通过使用 withColumn 在加载选项之后链接此函数来执行此操作。
val df = sparkSession
.read
.format("com.databricks.spark.xml")
.schema(customSchema)
.option("rootTag", "Transactions")
.option("rowTag", "Transaction")
.load("/Users/spark/Desktop/sample")
.withColumn("FileName",input_file_name())
答案 1 :(得分:0)
使用sql函数input_file_name。在你的情况下,它应该像
import org.apache.spark.sql.functions._
val dfWithFile = df.withColumn("file",input_file_name)