如何使用python读取HDFS目录中的文件

时间:2017-02-27 11:26:00

标签: python hadoop hdfs

我正在尝试使用Python读取HDFS目录中的文件。我使用下面的代码,但我收到错误。

代码

<xsl:template match="xmlData/records">
    <xsl:for-each select="record[generate-id() = generate-id(key('monthof',eventdate)[1])]">
        <xsl:sort select="jeventdate"/>
        <h2><xsl:value-of select="eventdate"/></h2>
        <xsl:for-each select="key('monthof', eventdate)[generate-id() = generate-id(key('companyof',concat(eventdate,'|',companyname))[1])]">
            <xsl:sort select="companyname"/>
            <h3>
                <xsl:value-of select="companyname"/>
            </h3>
            <table>
                <xsl:for-each select="key('companyof',concat(eventdate,'|',companyname))[generate-id() = generate-id(key('userof',concat(eventdate,'|',companyname,'|',usersname))[1])]">
                    <tr>
                        <td><xsl:value-of select="userid"/></td>
                        <td><xsl:value-of select="usersname"/></td>
                    </tr>                                   
                </xsl:for-each>
            </table>
        </xsl:for-each>
    </xsl:for-each>
</xsl:template>

错误

<xsl:template match="xmlData/records">
    <xsl:for-each-group select="record" group-by="eventdate">
        <xsl:sort select="jeventdate"/>
        <h2><xsl:value-of select="eventdate"/></h2>
        <xsl:for-each-group select="current-group()" group-by="companyname">
            <xsl:sort select="companyname"/>
            <h3>
                <xsl:value-of select="companyname"/>
            </h3>
            <table>
                <xsl:for-each-group select="current-group()" group-by="usersname">
                    <tr>
                        <td><xsl:value-of select="userid"/></td>
                        <td><xsl:value-of select="usersname"/></td>
                    </tr>                                   
                </xsl:for-each-group>
            </table>
        </xsl:for-each-group>
    </xsl:for-each-group>
</xsl:template>

更新

我想要解析的 hdfs 目录中有10-15个xml文件。当目录中只有一个xml时,我能够解析xml,但是一旦我有多个文件,我就无法解析xml。对于这个用例,我想编写python代码,以便我可以从我的目录解析一个文件,一旦我解析它移动到下一个。

2 个答案:

答案 0 :(得分:2)

您可以使用通配符char *来读取目录中的所有文件:

hadoop fs -cat /user/cloudera/CCMD/*

或者只是阅读xml文件:

hadoop fs -cat /user/cloudera/CCMD/*.xml

答案 1 :(得分:1)

例外是cat: '/user/cloudera/CCMD': Is a directory

您正在尝试对目录执行文件操作。将文件的路径传递给命令。

subprocess中使用此命令,而不是

hadoop fs -cat /user/cloudera/CCMD/filename