티스토리 뷰

반응형

텍스트 포맷으로 데이터를 다룰때 가장편하게 사용하는게 우리팀은 탭을 구분자로 만든 파일을 사용한다.

그리고 일반적으로 이걸 읽어들이는 모듈은 csv 관련 모듈을 써서 사용하게 된다. 이를 케이스별로 어떻게 쓰는지 알려주고자 한다.

 

1. 헤더라인 있음 + 구분자 정의

맨 윗줄에 필드명이 정의된 경우를 의미한다. 이때는 특별히 해줄것은 없다.

단, 구분자의 변경이 필요하다면, 다음과 같이 parse_options 을 잘 정의해줘야한다.

나는 chatGPT 가 과거 버전의 해결법을 알려준건지 이것때문에 삽질을 꽤 했다.

import pyarrow.fs as fs
import pyarrow.csv as csv
import duckdb

hdfs = fs.HadoopFileSystem(host='hdfs://my', user='user', kerb_ticket='/tmp/cc_hadoop')
file_path = "/user/user/export/sample.tsv"

table = None
with hdfs.open_input_file(file_path) as file:
    table = csv.read_csv(
        file,
        parse_options=csv.ParseOptions(delimiter="\t")   # 구분자 설정
    )

...

 

2. 헤더없어서 수동으로 정의하기

맨윗줄에 필드명이 있는 헤더가 없는 경우의 사용법을 의미한다.

다른점은 read_options 인자에 ReadOption 을 정의해주고, colum_names 를 수동으로 정의해줘야하는것이 다르다.

 

처음에는 사용법을 잘못써서 첫번째행이 누락되었는데 주의해서 스도록 하자.

import pyarrow.fs as fs
import pyarrow.csv as csv
import duckdb

hdfs = fs.HadoopFileSystem(host='hdfs://my', user='user', kerb_ticket='/tmp/cc_hadoop')
file_path = "/user/user/export/sample_nohead.tsv"
new_column_names = ["keyword", "cust_id", "imp_cnt", "clk_cnt"]
table = None
with hdfs.open_input_file(file_path) as file:
    table = csv.read_csv(
        file,
        read_options=csv.ReadOptions(
            skip_rows=0,
            column_names=new_column_names
        ),
        parse_options=csv.ParseOptions(delimiter="\t")   # 구분자 설정
    )
...

끝.

반응형
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/01   »
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
글 보관함