Database Reference
In-Depth Information
Als Nächstes folgt eine
while
-Schleife, die fortlaufend Token aus dem XML-
Stream einliest, bis keine mehr übrig sind. Innerhalb der
while
-Schleife ver-
arbeiten wir das aktuelle Token. Was wir genau machen, hängt davon ab, ob
das Token am Anfang eines XML-Tags steht oder an dessen Ende oder ob es
sich um den Text dazwischen handelt.
Die Wikipedia verarbeiten
Nun können wir diese grundlegende Verarbeitung von XML mit unserer Er-
läuterung der
HTable
-und
Put
-Schnittstellen kombinieren. Hier das resul-
tierende Skript. Das meiste sollte Ihnen vertraut sein und wir gehen auf die
wenigen neuen Teile genauer ein.
hbase/import_from_wikipedia.rb
require
'time'
import
'org.apache.hadoop.hbase.client.HTable'
import
'org.apache.hadoop.hbase.client.Put'
import
'javax.xml.stream.XMLStreamConstants'
def
jbytes(
*
args )
args.map { |arg| arg.to
_
s.to
_
java
_
bytes }
end
factory = javax.xml.stream.XMLInputFactory.newInstance
reader = factory.createXMLStreamReader(java.lang.System.in)
{
document = nil
buffer = nil
count = 0
table = HTable.new( @hbase.configuration,
'wiki'
)
|
table.setAutoFlush( false )
while
reader.has
_
next
type = reader.next
if
type == XMLStreamConstants::START
_
ELEMENT
}
case
reader.local
_
name
when
'page'
then
document = {}
when
/title|timestamp|username|comment|text/
then
buffer = []
end
~
elsif
type == XMLStreamConstants::CHARACTERS
buffer << reader.text
unless
buffer.nil?
elsif
type == XMLStreamConstants::END
_
ELEMENT
case
reader.local
_
name
when
/title|timestamp|username|comment|text/
document[reader.local
_
name] = buffer.join