2014-10-14 1 views
1

Hadoop Streaming with Python을 사용하여 Thrift 레코드가 포함 된 시퀀스 파일을 읽고 쓰고 싶습니다. 나는 다음을 살펴 봤으며 HADOOP-1722 이후에 가능하다고 생각하지만, 누군가 이미 이것을하고 예제를 줄 수 있다면 그것은 좋을 것이다. Hadoop Streaming with Python과 함께 사용하여 둔화 레코드가 포함 된 읽기/쓰기 시퀀스 파일

http://static.last.fm/johan/huguk-20090414/klaas-hadoop-1722.pdf

https://issues.apache.org/jira/browse/HADOOP-1722

How to use "typedbytes" or "rawbytes" in Hadoop Streaming?

주요

http://mojodna.net/2013/12/27/binary-streaming-with-hadoop-and-nodejs.html

파이썬 표준 입력에서 중고품 객체를 읽을 수있을 것입니다.

+0

[링크 전용] (http://meta.stackexchange.com/search?q=link+only+answer) 질문에 대해서는 생각해 본 적이 없습니다. 분명히 가능합니다. 좋은가요? 나는 그것을 의심 할 것이다. [SO의 품질 표준] (http://meta.stackexchange.com/questions/7931/faq-for-stack-exchange-sites)에 맞게 질문을 개선 할 수 있습니까? – JensG

+0

질문에 필요한 구체적인 설명이나 자세한 설명이 있습니까? 질문이 명확하지 않습니까? – Nikhil

+0

절약 기록이있는 seq 파일이 있습니까? –

답변

2

드디어 Hadoopy으로 처리했습니다.

이것은 내 간단한 스 드리프트 개체입니다.

struct Test { 
    1: required string foo; 
    2: required string bar; 
} 

명령 줄 도구를 사용하여 파이썬 정의를 생성하고 디렉토리를 압축합니다. 그런 다음 몇 가지 데이터를 생성하고 loadtb를 사용하여 HDFS로 푸시했습니다.

다음은 데이터를 비 직렬화하여 단순히 문자열로 쓰는 코드입니다.

import hadoopy 
from thrift.protocol import TBinaryProtocol 
from thrift.TSerialization import deserialize 
import sys 

class Mapper(object): 
    def __init__(self): 
     sys.path.append('lib/test.zip/gen-py') 
     from Test.ttypes import Test 
     self.protocol_factory = TBinaryProtocol.TBinaryProtocolFactory 
     self.test = Test() 
    def map(self, key, value): 
     deserialize(self.test, key, protocol_factory=self.protocol_factory()) 
     yield 1, self.test.foo + " " + self.test.bar 

if __name__ == '__main__': 
    hadoopy.run(Mapper) 

이것은 드라이버 스크립트입니다.

import hadoopy 

    hadoopy.launch('/data/fuscala', '/data/fuscala-output', 'fuscala1.py', remove_output = True, files = ["test.zip"]) 
    data = hadoopy.readtb('/data/fuscala-output') 
    for i, j in data: 
     print i,j 
관련 문제