如何使用 databricks xml 解析器获取 Hdfs 目录中具有相同 xml 架构的所有 xml 文件的单个数据框
最佳答案
您可以使用通配符来做到这一点。请参阅 Spark dataframeReader load
方法。
load
可以采用单个路径字符串、一系列路径,或者对于没有路径的数据源(即不是 HDFS 或 S3 或其他文件系统)不带参数。
http://spark.apache.org/docs/latest/api/scala/index.html#org.apache.spark.sql.DataFrameReader
val df = sqlContext.read.format("com.databricks.spark.xml")
.option("inferschema","true")
.option("rowTag", "address") //the root node of your xml to be treated as row
.load("/path/to/files/*.xml")
load
可以采用以逗号分隔路径的长字符串
.load("/path/to/files/File1.xml, /path/to/files/File2.xml")
或者类似于这个答案 Reading multiple files from S3 in Spark by date period
您还可以使用路径序列
val paths: Seq[String] = ...
val df = sqlContext.read.load(paths: _*)
请注意,inferschema
对于 XML 来说非常繁忙。当涉及大量文件时,我并没有取得很大的成功。指定模式效果更好。如果您可以保证您的 XML 文件都具有相同的架构,您可以使用其中的一小部分样本来推断架构,然后加载其余的文件。但我认为这并不安全,因为 XML 仍然可以是“有效的”,即使如果缺少与 XSD 有关的某些节点或元素。
关于scala - 如何使用spark databricks xml解析器从Hdfs目录加载所有xml文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42010638/