input_file_name在spark-xml

时间:2017-04-12 14:49:32

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

我正在尝试通过com.databricks.spark.xml格式加载xml文件时为每一行添加输入文件名。但它返回文件名的空列..

以下是代码段。我正在使用input_file_name函数:

sqlContext.read.format("com.databricks.spark.xml")
  .option("rowTag", "BO_RECORD")
  .load("file:///<path>/*")
  .withColumn("filename", input_file_name())
  .show()

返回:

+------------+-----------+---------------+--------+
|TicketRefund|TicketsSold|_corrupt_record|filename|
+------------+-----------+---------------+--------+
|           0|          3|           null|        |
|           0|          1|           null|        |
|           0|         18|           null|        |
|           0|         22|           null|        |
|           0|          3|           null|        |
+------------+-----------+---------------+--------+

我尝试了不同的方法,但在使用com.databricks.spark.xml时它仍返回空文件名。

sqlContext.read.format("com.databricks.spark.xml")
  .option("rowTag", "BO_RECORD")
  .load("file:///<path>/*")
  .select(input_file_name())
  .show()

但是,对文本文件执行正常的数据帧加载时效果很好。

请帮助。

1 个答案:

答案 0 :(得分:0)

可能,

import org.apache.spark.sql.functions._
... .withColumn("filename",lit("anyFileName")). ..

如果不起作用,请检查功能&#34; input_file_name()&#34;在所有执行程序中都运行良好,而不仅仅是驱动程序节点。