【发布时间】:2012-10-27 09:40:25
【问题描述】:
我正在使用 python 和 hadoop 来处理一个 xml 文件,我有以下格式的 xml 文件
temporary.xml
<report>
<report-name name="ALL_TIME_KEYWORDS_PERFORMANCE_REPORT"/>
<date-range date="All Time"/>
<table>
<columns>
<column name="campaignID" display="Campaign ID"/>
<column name="adGroupID" display="Ad group ID"/>
<column name="keywordID" display="Keyword ID"/>
<column name="keyword" display="Keyword"/>
</columns>
<row campaignID="79057390" adGroupID="3451305670" keywordID="3000000" keyword="Content"/>
<row campaignID="79057390" adGroupID="3451305670" keywordID="3000000" keyword="Content"/>
<row campaignID="79057390" adGroupID="3451305670" keywordID="3000000" keyword="Content"/>
<row campaignID="79057390" adGroupID="3451305670" keywordID="3000000" keyword="Content"/>
</table>
</report>
现在我要做的就是处理上面的 xml 文件,然后将数据保存到 MSSQL 数据库中。
mapper.py代码
import sys
import cStringIO
import xml.etree.ElementTree as xml
if __name__ == '__main__':
buff = None
intext = False
for line in sys.stdin:
line = line.strip()
if line.find("<row>") != -1:
intext = True
buff = cStringIO.StringIO()
buff.write(line)
elif line.find("</>") != -1:
intext = False
buff.write(line)
val = buff.getvalue()
buff.close()
buff = None
print val
在这里,我要做的就是从row tags 获取数据,即campaignID,adgroupID,keywordID,keyword 的值并打印它们,作为reducer.py 的输入(其中包含将数据保存在数据库中的代码)。
我查看了一些示例,但标签类似于<tag> </tag>,但就我而言,我只有<row/>
但是我上面的代码不起作用/没有打印任何东西,任何人都可以更正我的代码并添加必要的 python 代码以从行标签中获取值/数据(我对 hadoop 非常非常陌生),所以下次会扩展代码。
【问题讨论】: