从具有自定义架构错误的XML源读取



看起来是一个非常简单的问题,但非常烦人。。

我有一个XML文件,其结构如下:

<A attr1="Str1" attr2="Long1">
<B attr3="Str1" attr4="Str2" attr5="Long1"/>
<B attr3="Str1" attr4="Str2" attr5="Long1"/>
....
<B attr3="Str1" attr4="Str1" attr5="Integer1"/>

我的目标是将它读取到Spark(Pyspark)DataFrame中,以便稍后进行处理。

我正在使用Databricks包。当我运行以下代码时:

df = sqlContext.read.format('com.databricks.spark.xml') 
.option('rowTag','A') 
.option('attributePrefix','att_') 
.load('s3a://path.to.my.xml')

得到的df的模式(自动推断)如下:

root
|-- A: array (nullable=true)
|-- element: struct (containsNull=true)
|-- _VALUE: string(nullable=true)
|-- att_attr3: string(nullable=true)
|-- att_attr4: long(nullable=true)
|-- att_attr5: long(nullable=true)
|-- att_attr1: string(nullable=true)
|-- att_attr2: long(nullable=true)

在这种情况下,问题是attr4,我希望它是字符串类型,但被视为long

我试图设置的每个自定义架构都会导致一些内部错误,或者数据帧中有0条记录。

请帮助:)

(Spark 2.0.0版)

好。。。找到了设置模式的适当方法,以便能够正确解析XML。一些小的语法问题。如果你感兴趣或有类似的问题,请评论,我会在这里写出来。

相关内容

  • 没有找到相关文章

最新更新