5

我有一个 Thrift php 客户端,我想在 HBase 表中写入,我正在执行以下操作:

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

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

4

2 回答 2

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

我没有测试过这个。

于 2011-02-11T23:48:30.853 回答
2

我必须承认,我不知道您要做什么(可能是由于缺乏有关 Thrift 和 HBase 的知识),但是如果我正确理解了您的问题,那么您正在尝试编写一些 PHP 数据结构(在这种情况下为数组)到存储介质。为此,您必须以某种方式序列化您的数据。这可能是使用自定义 XML 序列化、自定义二进制序列化,或者可能是最简单的解决方案,由serialize()相应的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)

请看

于 2009-05-12T08:08:04.023 回答