我正在使用 python 和 hadoop 来处理 xml 文件,我有以下格式的 xml 文件
临时.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非常非常陌生),这样可以扩展下次的代码。