使用pyspark中的值包装rdd.saveAsTextFile的输出

时间:2018-05-24 17:51:32

标签: xml apache-spark pyspark

想知道如何用pyspark中的字符串“包装”saveAsTextFile的结果。

我正在尝试将RDD中的XML字符串写入多个文件,特别是RDD中的分区数。我成功完成了这样的事情:

import math, uuid

# number of records per page
perpage = 100 

# write to files
df.select('document').rdd.repartition(math.ceil(df.count()/perpage)).map(lambda row: row.document.replace('<?xml version="1.0" encoding="UTF-8"?>','')).saveAsTextFile('file:///foo/bar/output/%s' % str(uuid.uuid4()))

对于具有285行的RDD - 作为示例 - 这会产生3个part-0000#文件,这很好。每个,看起来像这样:

<foo>
    <bar>amazing strings</bar>
</foo>
<foo>
    <bar>amazing strings2</bar>
</foo>
<foo>
    <bar>amazing strings3</bar>
</foo>
...
...

但是,作为一个整体,这不是有效的XML,因为此文件需要根标记。我想要像...这样的东西。

<scrog>
    <foo>
        <bar>amazing strings</bar>
    </foo>
    <foo>
        <bar>amazing strings2</bar>
    </foo>
    <foo>
        <bar>amazing strings3</bar>
    </foo>
    ...
    ...
</scrog>

我知道我可以在事后添加<scrog>并将</scrog>附加到文本文件中,但我想更好地理解使用saveAsTextFile,以及是否会是一个选择。

谢谢!

0 个答案:

没有答案