倹約

2009-05-11 11 views
4

を使用してのHBaseでの書き込みPHPの配列は、私は倹約のPHPのクライアントを持っていると私はHBaseのテーブルに書きたいと私は次のことをやっている:倹約

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

問題はHBaseの中に値を挿入するときにということですは配列の要素を格納する代わりに 'Array'に変換されます。 リストを配列(またはバイト配列)として保存するには

答えて

2

(おそらく、ThriftとHBaseに関する知識が不足しているために)何をしようとしているのか分かりません。あなたの質問を正しく理解していれば、PHPのデータ構造(この場合は配列)を記憶媒体に書き込もうとしています。これを達成するには、にシリアル番号のデータを入力する必要があります。これは、カスタムXMLシリアル化、カスタムバイナリシリアル化、またはおそらく最も単純なソリューションであるserialize()と対応するunserialize()によって提供されるPHP内部シリアル化メカニズムを使用している可能性があります。

言語間の相互運用性を目指す場合は、カスタムシリアル化を使用するか、目的の言語でPHPシリアル化フォーマットをシリアル化しないシリアル化解除関数を記述する必要があります。

だけで簡単な例 - あなたは、このコードを配置する必要があるだろうどこ私はあなたがやっている内容を正確に把握していないように私は、知らない:

$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) 

+1

答えてくれてありがとう、私はPHPの直列化メカニズムを知っていますが、HbaseカラムにPHP配列をバイト配列として書き込む方法があるのだろうと思いました。私は、PHPクライアントを生成するためにhbaseに来るHBase.thriftファイルを使用し、テストを行うためにDemoClient.phpファイルを使用し、テストを行うためにHBAseリリーフサーバを使用しました。 HBase.thriftファイルで構造が定義されている方法と関連していると思います –

3

HBase変異オブジェクトには、配列ではなくブール値/テキスト値の3つのフィールドが必要です。ですから、構造化された値を文字列に変換する必要があります。

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

HBase Thrift APIの定義はここにあります。 http://svn.apache.org/viewvc/hbase/trunk/src/main/resources/org/apache/hadoop/hbase/thrift/Hbase.thrift?view=markup

これはテストしていません。

関連する問題