将基本的64位编码的复杂XML文件读入spark数据框/

时间:2019-03-06 23:15:14

标签: xml apache-spark base64

我已经彻底研究了这个问题,没有给出任何答案,但是我是Spark的新手,可能会错过一些东西。

我得到了一组文件,这些文件是基于base-64编码的XML,我被要求将其转换为数据帧,以便可以执行一些分析。我可以解码它们:

import base64
decoded = lines.map(lambda l: base64.b64decode(l).decode("utf-8", "ignore"))

现在我有一个15行的PipelinedRDD对象,每行都是一个非常复杂的嵌套XML文件的字符串表示形式。实际文件很可能具有商业敏感性,但可以给您一个提示:

<MessageBody>
    <MessageProperties>
        <SomeProperty>text</SomeProperty>
        <SomeOtherProperty>
            <Code>text</Code>
            <Name>text</Name>
        </SomeOtherProperty>
        <DateTime dateType='Departure'>a date</DateTime>
        <DateTIme dateType='Arrival'>another date</DateTime>

正如我所说,实际的XML文本要大得多。嵌套的属性很多,并且许多标签具有相同的名称(例如DateTime),并在标签中提供了其他信息。

我知道spark-xml库,但是不知道如何使它读取字符串而不是实际的XML文件,或者是否可以处理这种复杂的XML。

我知道Python的ElementTree库可以从字符串创建一棵树,但是除了编写一些具有所有标记名(如DateTime)和其他信息(如dateType)的递归函数外,不知道如何将该树转换为数据帧='Arrival'),并将其分配给列名,并将其中的文本(如“另一个日期”)分配给值,但是我被告知这太低效了,必须有一种方法可以简单地将XML字符串读取为数据框。

如果有帮助,我确实有XML的.xsd文件。任何帮助将不胜感激。

0 个答案:

没有答案