ich eine Eingabedatei (txt), wie untenWie StreamXmlRecordReader verwenden single & mehrzeilige xml Datensätze innerhalb einer einzigen Datei
<a><b><c>val1</c></b></a>||<a><b><c>val2</c></b></a>||<a><b>
<c>val3</c></b></a>||<a></b><c>val4-c-1</c><c>val4-c-2</c></b><d>val-d-1</d></a>
haben zu analysieren Wenn Sie die Eingabe sorgfältig die XML-Datensatz nach dem dritten "beobachten, || ' ist in zwei Zeilen aufgeteilt.
Ich möchte StreamXmlRecordReader von Hadoop Streaming verwenden, um diese Datei zu analysieren
-inputreader "org.apache.hadoop.streaming.StreamXmlRecordReader,begin=<a>,end=</a>,slowmatch=true
, die ich nicht in der Lage bin der dritte Datensatz zu analysieren.
Ich erhalte die folgenden Fehler
Traceback (most recent call last):
File "/home/rsome/test/code/m1.py", line 13, in <module>
root = ET.fromstring(xml_str.getvalue())
File "/usr/lib64/python2.6/xml/etree/ElementTree.py", line 964, in XML
return parser.close()
File "/usr/lib64/python2.6/xml/etree/ElementTree.py", line 1254, in close
self._parser.Parse("", 1) # end of data
xml.parsers.expat.ExpatError: no element found: line 1, column 18478
I slowmatch verwendet haben = true als gut, aber noch kein Glück.
Mein Ausgang kommt, wie unten
$ hdfs dfs -text /poc/testout001/part-*
rec::1::mapper1
<a><b><c>val1</c></b></a>
rec::2::mapper1
<a><b><c>val2</c></b></a>
rec::3::mapper1
<a><b>
rec::4::mapper1
<c>val3</c></b></a>
rec::1::mapper2
<a></b><c>val4-c-1</c><c>val4-c-2</c></b><d>val-d-1</d></a>
Meine erwartete Ausgabe ist
$ hdfs dfs -text /poc/testout001/part-*
rec::1::mapper1
<a><b><c>val1</c></b></a>
rec::2::mapper1
<a><b><c>val2</c></b></a>
rec::3::mapper1
<a><b><c>val3</c></b></a>
rec::1::mapper2
<a></b><c>val4-c-1</c><c>val4-c-2</c></b><d>val-d-1</d></a>
jede Hilfe zu diesem Thema eine große Hilfe
Super stuff! Verwenden Sie Ihren Reader als Tutorial. Vielen Dank. – Houston