2013-08-09 4 views
0

색인을 생성하기 위해 LucidWorks Big Data에 제공 될 데이터에 대해 일부 사전 처리를 수행하려고합니다. LWBD는 Sequencefile 파일 형태로 SolrXML을 허용합니다. 나는 자동으로 파일의 이름이 포함 된 열을 만들 수있는 형식으로단일 키를 여러 값으로 매핑하는 시퀀스 파일

filename_1 => <here goes some XML> 
... 
filename_N => <here goes some more XML> 

돼지의 기본 PigStorage()로드 기능을 디렉토리 및 출력 할 수있는 모든 SolrXML 파일을하는 돼지 스크립트를 생성 할에서 데이터는 다음과 같을 것이다 이상적으로하는 추출 :

{"filename_1", "<here goes some XML>"} 
... 
{"filename_N", "<here goes some more XML>"} 

그러나, PigStorage()는 자동으로 라인 구분 기호로 '\ n을'을 사용하기 때문에 내가 실제로 다음과 같습니다 가방입니다 끝낼 :

{"filename_1", "<some partial XML from file 1>"} 
{"filename_1", "<some more partial XML from file 1>"} 
{"filename_1", "<the end of file 1>"} 
... 

사진을 찍을 것입니다. 내 질문은, 내가이 가방을 SequenceFile에 쓰려면 어떻게 다른 응용 프로그램에서 읽을 것이라고?

"filename_1" => "<some partial XML from file 1> 
       <some more partial XML from file 1> 
       <the end of file 1>" 

으로 결합 할 수 있습니까? 내가 피드하는 응용 프로그램의 기본 처리 방법은 무엇입니까? 아니면이 형식으로 가져 오기 위해 할 수있는 몇 가지 사후 처리가 있습니까? 도와 줘서 고마워.

+0

SequenceFile은 어떻게 작성하고 있습니까? 전의. 어떤 돼지 라틴어/UDF를 사용하고 있습니까? – mr2ert

답변

0

내장 SequenceFile 작성기에 대해서는 아무 것도 찾을 수 없으므로 UDF를 사용하고 있다고 가정하고 있습니다. 그렇지 않은 경우에는 필요합니다.

미리 파일을 파일 이름별로 그룹화 한 다음 작성자 UDF로 보내야합니다.

@outputSchema('xml_complete: chararray') 
def stringify(bag): 
    delim = '' 
    return delim.join(bag) 

참고 :

DESCRIBE xml ; 
-- xml: {filename: chararray, xml_data: chararray} 

B = FOREACH (GROUP xml BY filename) 
    GENERATE group AS filename, xml.xml_data AS all_xml_data ; 

당신이 SequenceFile 작가를 작성한 방법에 따라, 같은 파이썬 UDF를 사용하여 chararray에 시간 앞서 all_xml_data 가방을 변환하는 것이 더 쉬울 수 있습니다이 이런 방식으로 XML 데이터의 순서가 뒤죽박죽이된다는 것을 깨닫는 것이 중요합니다. 가능한 경우 데이터를 기반으로 stringify을 재구성 할 때 확장 할 수 있습니다.