我正在尝试使用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代码,以便我可以从我的目录解析一个文件,一旦我解析它移动到下一个。
答案 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