美文网首页
Flink读取HDFS中的xml(一)——读取XML的几种方式

Flink读取HDFS中的xml(一)——读取XML的几种方式

作者: lsyarn | 来源:发表于2019-11-25 00:16 被阅读0次

    《Flink读取HDFS中的xml》系列记录了我在(使用Flink)处理xml文件过程中遇到的问题,以及对解决办法的探索。
    本系列包含以下几个部分

    • 一、读取XML的几种方式
      xml解析的几种方式,适用场景。
    • 二、Flink XmlInputFormat读取xml
      Flink读取HDFS中的xml文件。
    • 三、读取HDFS中的xml zip压缩文件
      多个xml文件压缩后存储到HDFS,如何使用Flink读取。
    • 四、ZipXmlInputFormat的优化
      优化对zip xml文件的读取。
    1. 什么是xml

    xml是一种标记语言,它使用标签存储数据,使用标签的属性对数据进行描述,使用标签之间的嵌套关系标识数据的分类(层级)关系。由于存储数据的同时也存储了大量关于数据的描述信息,其中通常有大量重复内容。这种标签嵌套标签的结构可以看成一种树形结构。

    xml文档示例

    <root>
        <users>
            <user id="a">
                <name>王二</name>
                <age>8</age>
            </user>
            <user id="b">
                <name>张三</name>
                <age>10</age>
            </user>
        </users>
    </root>
    
    1. 使用DOM和SAX方式解析xml

    DOM和SAX解析方式都是Java官方支持的解析方式,不同之处在于:

    • DOM将整个xml文档加载到内存中,建立一个与之对应的型数据结构,方便随机读取和修改,但是当文档较大时占用内存交大。

    • SAX将xml作为文本顺序读取,在标签开始和结束时通过回调方法触发解析程序和解析终止程序,由于不需要将整个文本加载到内存,可以做到边读取边解析,适合于大文件的读取,也可以有选择的读取指定标签。

    DOM方式主要方法的调用可以参看文末的参考链接,这里主要记录SAX方式的读取流程:

    SAX方式解析XML的精髓在于org.xml.sax.helpers.DefaultHandler中的几个方法重写:

    • startDocument:读取到文档开始,可以做一些初始化工作
    • startElement:读取每个标签的开始,可以获取标签的属性,过滤标签
    • characters:读取标签开始和结束之间的内容(text的内容)
    • endElement:读取到每个标签的结束,可以根据标签名称,对text进行解析、记录
    • endDocument:读取到文档末尾,可以做一些清理工作
      上述的5个方法的顺序,也是整个文档解析的顺序,重复2到3步完成整个文档解析。

    参考链接:
    Java文件操作①——XML文件的读取

    相关文章

      网友评论

          本文标题:Flink读取HDFS中的xml(一)——读取XML的几种方式

          本文链接:https://www.haomeiwen.com/subject/rrqxsctx.html