Python에서 Parquet 파일 읽기 및 쓰기
- Python에서 Parquet 파일을 읽고 쓰는 Parquet 인터페이스
- Python의 PyArrow 모듈을 사용하여 Parquet 파일에 DataFrame 쓰기
- Python에서 PyArrow 모듈을 사용하여 Parquet 파일의 메타데이터 읽기
- Python에서 Fastparquet 엔진을 사용하여 Parquet 파일에 데이터 쓰기
- Python에서 Fastparquet 엔진을 사용하여 Parquet 파일 읽기
- 결론
이 기사는 Python에서 Parquet 파일을 작성하고 읽는 방법에 중점을 둡니다. 이러한 유형의 파일은 데이터를 열 단위로 저장하는 스토리지 시스템 형식입니다.
Parquet는 CSV와 같은 행 기반 파일 형식에 비해 성능이 최적화된 파일 형식입니다. Parquet 기반 파일 시스템에서 쿼리를 실행할 때 필요한 데이터에 매우 빠르게 초점을 맞출 수 있습니다.
Python에서 Parquet 파일을 읽고 쓰는 Parquet 인터페이스
Python은 엔진을 사용하여 데이터 프레임에 쓰고 쪽모이 세공 파일을 읽습니다. 이 기사에서는 데이터베이스에 Parquet 파일을 작성하는 일부 엔진에 대해 설명합니다.
데이터 분석 시스템에서 사용하기 위해 Apache Parquet 프로젝트는 표준화된 오픈 소스 열 저장 형식을 제공합니다. Apache Arrow는 Parquet 파일에서 읽거나 쓰는 데이터를 위한 최고의 인메모리 전송 계층입니다.
Python에서 parquet 파일을 읽는 두 개의 parquet 인터페이스인 pyarrow
및 fastparquet
에 대해 알아봅니다.
Python의 PyArrow 모듈
Apache Arrow 또는 PyArrow는 메모리 내 분석 개발 플랫폼입니다. 빅 데이터 시스템이 데이터를 빠르게 저장, 처리 및 전송할 수 있는 기술 컬렉션이 있습니다.
이 코드는 pyarrow
에 Python 바인딩되어 있어 Pandas를 사용하여 parquet 파일을 쓰고 읽을 수 있습니다.
pyarrow
설치는 pip
및 conda
로 쉽습니다.
pip
의 경우 다음 명령을 사용합니다.
pip install pyarrow
conda
의 경우 다음 명령을 사용합니다.
conda install -c conda-forge pyarrow
Python의 PyArrow 모듈을 사용하여 Parquet 파일에 DataFrame 쓰기
Python에서 데이터 프레임을 작성하고 Parquet 파일을 읽는 방법을 이해하기 위해 아래 프로그램에서 Pandas 테이블을 만들어 보겠습니다.
네 가지 가져오기가 필요합니다.
pyarrow
- 쪽모이 세공 마루 제품 작성용.numpy
- 다차원 배열용.pandas
- 데이터 프레임 생성용.parquet
-pyarrow
의 하위 기능입니다.
이 프로그램은 정수, 문자열 및 부울과 같은 여러 유형의 데이터 세트로 store1
데이터 프레임을 생성합니다. 색인 목록은 'abc'
로 설정되어 알파벳 순서로 행을 정렬합니다.
table1
변수에서 Table.from_pandas()
구문을 사용하여 Pandas 테이블이 생성됩니다. 이 표는 결과를 확인하기 위해 인쇄됩니다.
import pyarrow.parquet as pq
import numpy as np
import pandas as pd
import pyarrow as pa
store1 = pd.DataFrame(
{
"first": [5, np.nan, -9],
"second": ["apple", "samsung", "mi"],
"third": [False, False, True],
},
index=list("abc"),
)
table1 = pa.Table.from_pandas(store1)
print(table1)
출력:
C:\python38\python.exe "C:/Users/Win 10/main.py"
pyarrow.Table
first: double
second: string
third: bool
__index_level_0__: string
----
first: [[5,null,-9]]
second: [["apple","samsung","mi"]]
third: [[false,false,true]]
__index_level_0__: [["a","b","c"]]
Process finished with exit code 0
이제 이 데이터는 write_table
을 사용하여 쪽모이 세공 형식으로 작성됩니다. parquet 파일을 작성할 때 write_table()
함수에는 다양한 설정을 제어하기 위한 여러 인수가 포함됩니다.
data_page_size
- 이 매개변수는 열 청크 내에서 인코딩된 데이터 페이지의 대략적인 양을 조절합니다. 현재 1MB가 기본값입니다.flavor
-spark
와 같은 Apache Spark Parquet 소비자에 특정한 호환성 설정을 제공합니다.버전
- 적절한 Parquet 형식 버전입니다.1.0
이상의 값은 이전 판독기와의 호환성을 보장하지만2.4
이상의 값은 더 많은 Parquet 유형 및 인코딩을 가능하게 합니다.
이 프로그램에서 write_table()
매개변수는 table1
테이블과 parquet parquet.txt
를 쓰기 위한 기본 파일과 함께 제공됩니다.
문자열을 사용하지 않고 파일의 출처를 나타낼 수 있습니다. 다음 중 하나가 가능합니다.
- 문자열로 된 파일 경로
- 네이티브
PyArrow
파일 - 파이썬의 파일 객체
이 테이블을 읽으려면 read_table()
함수를 사용합니다. 변수 table2
는 테이블을 로드하는 데 사용됩니다.
마지막으로 이 parquet 파일은 table2.to_pandas()
를 사용하여 Pandas 데이터 프레임으로 변환되고 인쇄됩니다.
pq.write_table(table1, "sample_file.parquet")
table2 = pq.read_table("sample_file.parquet")
table2.to_pandas()
print("\n", table2)
출력:
C:\python38\python.exe "C:/Users/Win 10/main.py"
pyarrow.Table
first: double
second: string
third: bool
__index_level_0__: string
----
first: [[5,null,-9]]
second: [["apple","samsung","mi"]]
third: [[false,false,true]]
__index_level_0__: [["a","b","c"]]
Process finished with exit code 0
Parquet 파일은 일반적으로 거대한 데이터 파일이며 Python에서 Parquet 파일을 읽으려면 로드하는 데 시간이 오래 걸립니다. 따라서 전체 파일을 로드하는 대신 특정 열을 전달하여 데이터를 빠르게 읽을 수 있습니다.
변수 table3
에서 pq.read_table
기능을 사용하여 데이터를 씁니다. 매개변수 괄호 안에 first
및 third
라는 두 개의 열이 제공됩니다.
table3 = pq.read_table("parquet.txt", columns=["first", "third"])
print(table3)
출력에 선택한 열이 표시됩니다.
출력:
C:\python38\python.exe "C:/Users/Win 10/main.py"
pyarrow.Table
first: double
third: bool
----
first: [[5,null,-9]]
third: [[false,false,true]]
Process finished with exit code 0
Pandas 데이터 프레임을 소스로 사용하여 파일에서 열의 하위 집합을 읽을 때 추가 인덱스 열 데이터를 유지하기 위해 read_pandas
를 사용합니다.
table4 = pq.read_pandas("parquet.txt", columns=["second"]).to_pandas()
print(table4)
출력:
C:\python38\python.exe "C:/Users/Win 10/main.py"
second
a apple
b samsung
c mi
Process finished with exit code 0
문자열 파일 경로 또는 NativeFile
의 인스턴스(특히 메모리 맵)는 일반적으로 읽기 속도가 가장 느린 Python 파일 개체보다 읽을 때 더 잘 수행됩니다.
인덱스(행 레이블) 추적을 유지하기 위해 pa.Table.from_pandas
를 사용하여 테이블을 화살표 테이블로 변환할 때 하나 이상의 특수 열이 자동으로 생성됩니다. 인덱스가 가치가 없는 경우 인덱스를 저장하려면 더 많은 저장 공간이 필요하므로 preserve index=False
를 전달하여 생략하도록 선택할 수 있습니다.
import numpy as np
import pandas as pd
import pyarrow as pa
import pyarrow.parquet as pq
store = pd.DataFrame(
{
"first": [5, np.nan, -9],
"second": ["apple", "samsung", "mi"],
"third": [False, False, True],
},
index=list("abc"),
)
print(store)
table = pa.Table.from_pandas(store, preserve_index=False)
pq.write_table(table, "sample_file.parquet")
t = pq.read_table("sample_file.parquet")
print("\n", t.to_pandas())
표시된 쪽모이 세공 파일의 인덱스가 지워졌습니다.
출력:
C:\python38\python.exe "C:/Users/Win 10/main.py"
first second third
a 5.0 apple False
b NaN samsung False
c -9.0 mi True
first second third
0 5.0 apple False
1 NaN samsung False
2 -9.0 mi True
Process finished with exit code 0
Python에서 PyArrow 모듈을 사용하여 Parquet 파일의 메타데이터 읽기
파일에서 데이터를 읽는 것 외에도 read_table
메서드가 사용하는 ParquetFile
클래스는 메타데이터 읽기와 같은 추가 기능을 제공합니다.
import pyarrow.parquet as pq
parquet_file = pq.ParquetFile("example.parquet")
print(parquet_file.metadata)
출력:
C:\python38\python.exe "C:/Users/Win 10/main.py"
<pyarrow._parquet.FileMetaData object at 0x000001DADCBDCA90>
created_by: parquet-cpp-arrow version 9.0.0
num_columns: 4
num_rows: 3
num_row_groups: 1
format_version: 2.6
serialized_size: 2580
Process finished with exit code 0
Python에서 Fastparquet 엔진을 사용하여 Parquet 파일에 데이터 쓰기
parquet 파일 형식을 위한 Python 인터페이스입니다.
이 프로그램은 fastparquet
를 사용하여 쪽모이 세공 파일에 작성합니다. 데이터 프레임 store
는 student
및 marks
라는 두 개의 열로 생성됩니다.
데이터 프레임은 dataframe.to_parquet()
함수를 사용하여 쪽모이 세공 파일 sample.parquet
에 기록됩니다.
엔진은 fastparquet
로 선택되지만 pyarrow
로 설정할 수도 있습니다.
import pandas as pd
store = pd.DataFrame(
{
"student": ["Michael", "Jackson", "N", "John", "Cena"],
"marks": [20, 10, 22, 21, 22],
}
)
print(store)
store.to_parquet("sample.parquet", engine="fastparquet")
출력:
C:\python38\python.exe "C:/Users/Win 10/main.py"
student marks
0 Michael 20
1 Jackson 10
2 N 22
3 John 21
4 Cena 22
Process finished with exit code 0
Parquet 파일에 데이터가 기록되었으므로 파일을 읽어 봅시다.
Python에서 Fastparquet 엔진을 사용하여 Parquet 파일 읽기
parquet 파일은 pd.read_parquet
함수를 사용하여 읽혀지며 엔진을 fastparquet
로 설정하고 이를 변수 df
에 저장합니다. 그런 다음 결과가 인쇄됩니다.
df = pd.read_parquet("sample.parquet", engine="fastparquet")
print(df)
출력:
C:\python38\python.exe "C:/Users/Win 10/PycharmProjects/read_parquet/main.py"
student marks
0 Michael 20
1 Jackson 10
2 N 22
3 John 21
4 Cena 22
Process finished with exit code 0
결론
이 문서에서는 Python에서 parquet 파일을 읽는 방법을 설명합니다. 프로그램 예제는 pyarrow
와 fastparquet
를 모두 사용하여 parquet 파일을 읽는 방법을 보여줍니다.
독자는 Python에서 parquet 파일을 읽는 프로그램을 쉽게 만들 수 있어야 합니다.