2009-05-11 4 views
4

를 사용하여 나는 다음과 같은 일을 해요 :쓰기 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 직렬화 메커니즘을 알고 있지만 PHP 배열을 Hbase 열의 바이트 배열로 작성하는 방법이 있다면 궁금해하고있었습니다. 나는 HBase.thrift 파일을 사용하여 hbase로 PHP 클라이언트를 생성하고, DemoClient.php 파일을 사용하여 테스트를 수행했으며, HBAse 중고품 서버를 사용하여 테스트를 수행했습니다. HBase에서 구조가 정의되는 방식과 관련이 있다고 생각합니다. 확실하지 않습니다. –

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

테스트하지 않았습니다.