scala - 如何使用spark databricks xml解析器从Hdfs目录加载所有xml文件

标签 scala apache-spark apache-spark-sql databricks

如何使用 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/

相关文章:

scala - 如何在 Scala 中验证数字字符?

python - 如何通过索引而不是名称获取列?

apache-spark - 如何在udf中使用广播集合?

apache-spark - 使用 Window() 计算 PySpark 中数组的滚动总和?

apache-spark - 覆盖spark数据帧写入方法中的特定分区

apache-spark - WARN ReliableDeliverySupervisor : Association with remote system has failed, 地址现在被门控 [5000] 毫秒。原因:[已解除关联]

scala - 如何使用 "Seq"字段修改此嵌套案例类?

reflection - 案例类上的 `productElement(i)`是否使用反射?

scala - 我该如何理解? 'if..else'?

Scala:Spark SQL to_date(unix_timestamp) 返回 NULL