티스토리 뷰

반응형

duckdb 에서는 Parquet 은 지원하는데, orc 는 지원하지 않는다. 그리고 이슈를 찾아보면 별로 지원할 생각도 없는거 같다.

그래서 cli 툴로는 접근하는 제한이 있는데, apache arrow 를 경유하면 다양한 포맷을 읽는것이 가능하다.

여기서는 pyarrow 를 이용해서 접근하는 예제를 알려주도록 하겠다.

당연하지만, pip install pyarrow 가 선행되어야 한다.

 

해결방법

다음과 같이 pyarrow.orc 를 이용해서 orc 파일을 읽어내는게 가능하다.

아래 예제는 hdfs://my/user/user/export/sample/* 파일이 orc 포맷으로 저장되어있을때 읽는 예제이다.

 

hadoop 에 저장된 orc 파일을 읽어내는 샘플코드를 정리했다.

import pyarrow as pa
import pyarrow.fs as fs
import pyarrow.orc as orc
import duckdb

hdfs = fs.HadoopFileSystem(host='hdfs://my', user='user', kerb_ticket='/tmp/cc_hadoop')
base_path = "/user/user/export/sample"
file_list = [f.path for f in hdfs.get_file_info(pa.fs.FileSelector(base_path))]

tables = []
for file_path in file_list:
    with hdfs.open_input_file(file_path) as file:
        table = orc.ORCFile(file).read()
        if table.num_rows > 0:  # 빈 테이블은 건너뛰기
            tables.append(table)


conn = duckdb.connect()
final_table = pa.concat_tables(tables)
conn.register('final_table', final_table)

query = """
    SELECT 
       *
    FROM
      final_table
    LIMIT 10;
"""

cursor = conn.execute(query)

# 필드명 출력
fields = [desc[0] for desc in cursor.description]
print(fields)

# Jupyter에서 테이블 출력
df = cursor.fetchdf()
display(df)

 

chatGPT 에서 답변을 주기는하는데, 이런 종합적인 내용은 이상하게 함정이 많은데 이건 내가 삽질해서 실제 돌아간 코드를 만들었으니 도움이 되길 바란다.

반응형
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함