Spark Xml读取包括文件名

时间:2016-10-20 06:22:27

标签: xml apache-spark spark-dataframe

我正在尝试使用如下所示的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选项,但似乎没有理想的结果。

请提出建议或者我可以使用不同的方法实现目标吗?

谢谢,

2 个答案:

答案 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)