使用thrift在HBase中编写php数组

时间:2009-05-11 21:57:00

标签: php thrift hbase

我有一个Thrift php客户端,我想写一个HBase表,我正在做以下事情:

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

问题是当在HBase中插入时,值(即数组)将转换为“Array”而不是存储数组的元素。 如何将列表存储为数组(或字节数组)

2 个答案:

答案 0 :(得分:3)

HBase变异对象需要三个具有布尔/文本值的字段,而不是数组。因此,您需要将任何结构化值转换为字符串,例如。

  $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

我没有测试过这个。

答案 1 :(得分:2)

我必须承认我不知道你想要做什么(也许是由于缺乏关于Thrift和HBase的知识),但如果我理解你的问题,那你就试着写一些PHP数据结构(在这种情况下为阵列)到存储介质。要实现这一点,您必须以某种方式序列化您的数据。这可能是使用自定义XML序列化,自定义二进制序列化,或者也许是最简单的解决方案,serialize()提供的PHP内部序列化机制以及相应的unserialize()

如果您努力实现语言间互操作性,则应使用自定义序列化,或者必须编写反序列化函数,以使用目标语言对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)

请参见