SPARK XML-如何使用UND指定模式加载XML时如何执行struct Type String



我尝试加载动态XML文件并将数据转换为DataFrame。我的XML

的景象
<?xml version="1.0"?>
 <catalog>
  <book id="bk104">
   <title>Oberon</title>
   <code>000010</code>
  </book>
  <book id="bk106">
   <title>Lover</title>
   <code>000030</code>
  </book>
</catalog>

使用scala api:

val df = sqlContext.read
   .format("com.databricks.spark.xml")
   .option("rowTag", "book")
   .load("books.xml")

我尝试显示我的数据框架的架构:

root
     |-- title: string (nullable = true)
     |-- price: float (nullable = true)
     |-- code: long (nullable = true)

问题是:000010值(代码)是显示10,因为Scala API将其视为整数。

是否有任何解决方案可以将列"代码"读为字符串以保持值" 000010"?p/s:由于我的项目中的某些相反,不建议使用指定模式的解决方案

val df = sqlContext.read
    .format("com.databricks.spark.xml")
    .option("rowTag", "book")
    .schema(customSchema)
    .load("books.xml")

读取XML文件时,API接受几个选项:

路径:文件的位置。类似于Spark可以接受标准的Hadoop Globbing表达式。

rowtag :XML文件的行标签以将其视为行。例如,在此XML ...中,适当的值将是书籍。默认值是行。目前,不支持包含自闭合XML标签的行。

SamplingRatio :推断模式的采样比率(0.0〜1)。默认值为1。可能的类型是structType,arrayType,stringType,longType,doubleStepe,booleantype,timestamptype和nullType,除非用户为此提供架构。

排除tribute :是否要在元素中排除属性。默认值为false。

grethemptyvaluesasnulls :(弃用:使用nullvalue设置为"))是否要将白空间视为零值。默认值为false模式:解析过程中处理损坏记录的模式。默认值是允许的。允许:在符合损坏的记录时将其他字段设置为空,并将畸形的字符串放入由ColumnNameOfCorrupTrecord配置的新字段中。当用户设置模式时,它将为额外字段设置为空。DropMalformed:忽略整个损坏的记录。faffast:遇到损坏的记录时会引发异常。

columnNameOfCorrupTrecord :存储畸形字符串的新字符的名称。默认值为_corrupt_record。

attributeprefix :属性的前缀,以便我们可以区分属性和元素。这将是字段名称的前缀。默认为_。

valuetag :当没有孩子的元素中存在属性时,用于值的标签。默认为_value。

charset :默认为'utf-8',但可以设置为其他有效的charset名称

iNAREROUNDROUNDSPACES :定义是否应跳过读取值的周围空格。默认值为false。

当前有 no Option 可用于在读取XML文件时明确推断某些字段的模式。

因此,在这种情况下需要明确定义架构。

来源:https://github.com/databricks/spark-xml

最新更新