2009-05-11 10 views
4

ich einen Thrift PHP-Client und ich möchte in einem HBase Tabelle schreiben und ich tue das folgende:schreiben PHP-Array in HBase mit thrift

$mutations = array(
    new Mutation(array(
     'column' => 'entry:num', 
     'value' => array('a','b','c') 
    )), 
); 
    $client->mutateRow($t, $row, $mutations); 

Das Problem ist, dass, wenn in HBase Einsetzen des Wertes , das ein Array ist, wird in 'Array' konvertiert, anstatt die Elemente des Arrays zu speichern. Wie kann ich die Liste als ein Array (oder Byte-Array) speichern

Antwort

2

Ich muss zugeben, dass ich keine Ahnung habe, was Sie versuchen zu tun (vielleicht aufgrund eines Mangels an Wissen über Thrift und HBase), Aber wenn ich Ihre Frage richtig verstanden habe, versuchen Sie, eine PHP-Datenstruktur (Array in diesem Fall) auf ein Speichermedium zu schreiben. Um dies zu erreichen, müssen Sie Ihre Daten serialisieren. Das könnte eine benutzerdefinierte XML-Serialisierung, eine benutzerdefinierte binäre Serialisierung oder, vielleicht die einfachste Lösung, der interne PHP-Serialisierungsmechanismus sein, der von und dem entsprechenden unserialize() bereitgestellt wird.

Wenn Sie nach intersprachlicher Interoperabilität streben, sollten Sie eine benutzerdefinierte Serialisierung verwenden oder eine UNSialisierungsfunktion schreiben, die das PHP-Serialisierungsformat in Ihrer Zielsprache deserialisiert.

Nur ein kleines Beispiel - ich weiß nicht, wo Sie diesen Code müßten setzen, da ich nicht genau weiß, was man tut:

$mutations = array(
    new Mutation(array(
     'column' => 'entry:num', 
     'value' => array('a','b','c') 
    )), 
); 
$data = serialize($mutations); // $data now is a string 
// write $data to storage 
// read $readData from storage 
$readMutations = unserialize($readData); 
// $readMutations == $mutations 
// (but the Mutation instances are not the same instances any more) 

Bitte seee

+1

Danke für die Antwort, ich kenne den PHP-Serialisierungsmechanismus, aber was ich mich fragte war, ob es eine Möglichkeit gibt, das PHP-Array als Byte-Array in einer Hbase-Spalte zu schreiben. Ich habe die HBase.thrift-Datei verwendet, die an HBase kommt, um den PHP-Client zu generieren, die DemoClient.php-Datei verwendet, um den Test durchzuführen, und den HBAse-Sparsamkeitsserver, um die Tests durchzuführen. Ich denke, aber nicht sicher, dass dies die Art und Weise betrifft, wie die Strukturen in der HBase.thrift-Datei definiert sind –

3

Ein HBase-Mutationsobjekt benötigt drei Felder mit booleschen/Textwerten, nicht Arrays. Sie müssen also jeden strukturierten Wert in eine Zeichenkette umwandeln.

$mutations = array(
    new Mutation(array(
     'isDelete' => FALSE, 
     'column' => 'entry:num', 
     'value' => serialize(array('a','b','c')) 
    )), 
    ); 
    $client->mutateRow($t, $row, $mutations); 

Die Definition der HBase Thrift API ist hier; http://svn.apache.org/viewvc/hbase/trunk/src/main/resources/org/apache/hadoop/hbase/thrift/Hbase.thrift?view=markup

Ich habe dies nicht getestet.