parquetwrite
Parquet ファイルに列指向データを書き込む
説明
例
table または timetable を Parquet ファイルに書き込む
表形式データを Parquet ファイルに書き込み、同じ表形式データのサイズを .csv
ファイル形式と .parquet
ファイル形式で比較します。
ファイル outages.csv
から table に表形式データを読み取ります。
T = readtable('outages.csv');
Parquet ファイル形式にデータを書き込みます。既定で、関数 parquetwrite
は Snappy
圧縮方式を使用します。その他の圧縮方式を指定する場合は、 'VariableCompression'
の名前と値のペアを参照してください。
parquetwrite('outagesDefault.parquet',T)
ファイル サイズを取得して .csv
形式での表形式データのサイズと .parquet
形式での同じデータのサイズの比率を計算します。
.csv
ファイルのサイズを取得します。
fcsv = dir(which('outages.csv'));
size_csv = fcsv.bytes
size_csv = 101040
.parquet
ファイルのサイズを取得します。
fparquet = dir('outagesDefault.parquet');
size_parquet = fparquet.bytes
size_parquet = 44881
比率を計算します。
sizeRatio = ( size_parquet/size_csv )*100 ; disp(['Size Ratio = ', num2str(sizeRatio) '% of original size'])
Size Ratio = 44.419% of original size
入れ子にされたデータの Parquet ファイルへの書き込み
入れ子にされたデータを作成して Parquet ファイルに書き込みます。
入れ子層が 1 つであるデータが含まれた table を作成します。
FirstName = ["Akane"; "Omar"; "Maria"]; LastName = ["Saito"; "Ali"; "Silva"]; Names = table(FirstName,LastName); NumCourse = [5; 3; 6]; Courses = {["Calculus I"; "U.S. History"; "English Literature"; "Studio Art"; "Organic Chemistry II"]; ["U.S. History"; "Art History"; "Philosphy"]; ["Calculus II"; "Philosphy II"; "Ballet"; "Music Theory"; "Organic Chemistry I"; "English Literature"]}; data = table(Names,NumCourse,Courses)
data=3×3 table
Names NumCourse Courses
_____________________ _________ ____________
FirstName LastName
_________ ________
"Akane" "Saito" 5 {5x1 string}
"Omar" "Ali" 3 {3x1 string}
"Maria" "Silva" 6 {6x1 string}
入れ子にされたデータを Parquet ファイルに書き込みます。
parquetwrite("StudentCourseLoads.parq",data)
入れ子にされた Parquet データを読み取ります。
t2 = parquetread("StudentCourseLoads.parq")
t2=3×3 table
Names NumCourse Courses
_____________________ _________ ____________
FirstName LastName
_________ ________
"Akane" "Saito" 5 {5x1 string}
"Omar" "Ali" 3 {3x1 string}
"Maria" "Silva" 6 {6x1 string}
入力引数
filename
— 出力 Parquet ファイルの名前
文字ベクトル | string スカラー
出力 Parquet ファイルの名前。文字ベクトルまたは string スカラーとして指定します。
書き込み先の場所によって、filename
は次のいずれかの形式にできます。
場所 | 形式 | ||||||||
---|---|---|---|---|---|---|---|---|---|
現在のフォルダー | 現在のフォルダーに書き込むには、ファイルの名前を 例: | ||||||||
その他のフォルダー | 現在のフォルダーとは異なるフォルダーに書き込むには、絶対パス名または相対パス名を 例: 例: | ||||||||
リモートの場所 | リモートの場所に書き込むには、
リモートの場所に基づいて、
詳細については、リモート データの操作を参照してください。 例: |
データ型: char
| string
T
— 入力データ
table | timetable
入力データ。table または timetable として指定します。
Parquet の構造化データをエクスポートするには、parquetwrite
を使用します。書き込みでサポートされる Parquet データ型の詳細については、Apache Parquet データ型のマッピングを参照してください。
名前と値の引数
引数のオプションのペアを Name1=Value1,...,NameN=ValueN
として指定します。ここで Name
は引数名で、Value
は対応する値です。名前と値の引数は他の引数の後になければなりませんが、ペアの順序は重要ではありません。
R2021a より前では、コンマを使用してそれぞれの名前と値を区切り、Name
を引用符で囲みます。
例: parquetwrite(filename,T,'VariableCompression','gzip','Version','1.0')
VariableCompression
— 圧縮方式名
'snappy'
(既定値) | 'brotli'
| 'gzip'
| 'uncompressed'
| 文字ベクトルの cell 配列 | string ベクトル
圧縮方式名。次の値のいずれかとして指定します。
'snappy'
、'brotli'
、'gzip'
、または'uncompressed'
。1 つの圧縮アルゴリズムを指定すると、parquetwrite
は同じアルゴリズムを使用してすべての変数を圧縮します。または、各変数に使用する圧縮アルゴリズムの名前が含まれる文字ベクトルの cell 配列または string ベクトルを指定できます。
一般に、'snappy'
の読み取りと書き込みのパフォーマンスは高く、'gzip'
は CPU 処理時間が長くなりますが圧縮率が高く、'brotli'
は通常、圧縮速度が低下しますが最小ファイル サイズを作成します。
例: parquetwrite('myData.parquet', T, 'VariableCompression', 'brotli')
例: parquetwrite('myData.parquet', T, 'VariableCompression', {'brotli' 'snappy' 'gzip'})
VariableEncoding
— エンコード スキーム名
'auto'
(既定値) | 'dictionary'
| 'plain'
| 文字ベクトルの cell 配列 | string ベクトル
エンコード スキーム名。次の値のいずれかとして指定します。
'auto'
—parquetwrite
は logical 変数に対しては'plain'
エンコードを使用し、その他すべてに対しては'dictionary'
エンコードを使用します。'dictionary'
、'plain'
— あるエンコード スキームを指定した場合、parquetwrite
はそのスキームを使用してすべての変数をエンコードします。または、各変数に使用するエンコード スキームの名前が含まれる文字ベクトルの cell 配列または string ベクトルを指定できます。
一般に、'dictionary'
エンコードによってファイル サイズが小さくなりますが、繰り返しの値が多く含まれていない変数については 'plain'
エンコードの方がより高速になりえます。ディクショナリのサイズまたは一意の値の数が過度に大きくなると、エンコードは自動的に plain エンコードに戻ります。Parquet エンコードの詳細については、Parquet encoding definitions を参照してください。
例: parquetwrite('myData.parquet', T, 'VariableEncoding', 'plain')
例: parquetwrite('myData.parquet', T, 'VariableEncoding', {'plain' 'dictionary' 'plain'})
RowGroupHeights
— 出力行グループごとに書き込む行の数
非負の数値スカラー | 非負の整数のベクトル
出力行グループごとに書き込む行の数。非負の数値スカラーまたは非負の整数のベクトルとして指定します。
スカラーを指定した場合、そのスカラー値により、出力 Parquet ファイル内のすべての行グループの高さが設定されます。正確な倍数でない場合、最後の行グループに含まれる行数が少なくなることがあります。
ベクトルを指定した場合、そのベクトル内の各値により、出力 Parquet ファイル内の対応する行グループの高さが設定されます。ベクトル内のすべての値の合計は、入力 table の高さに一致している必要があります。
行グループは、メモリに一度に読み取ることができる Parquet ファイルの最小サブセットです。行グループの高さを減らすと、読み取り時にデータがメモリに適合しやすくなります。行グループの高さは、Parquet データ セットに対するフィルター処理のパフォーマンスにも影響します。行グループの高さが大きいほど、読み取り時にフィルター処理できるデータ量が多くなるためです。
RowGroupHeights
が指定されておらず、入力 table が 67,108,864 行を超えている場合、出力ファイル内の行グループの数は floor(TotalNumberOfRows/67108864)+1
になります。
例: RowGroupHeights=100
例: RowGroupHeights=[300, 400, 500, 0, 268]
Version
— 使用する Parquet バージョン
'2.0'
(既定値) | '1.0'
使用する Parquet バージョン。'1.0'
または '2.0'
のいずれかとして指定します。既定では、'2.0'
が最も効率的なストレージを提供しますが、Parquet 形式をサポートする外部アプリケーションとの最も幅広い互換性を実現するために '1.0'
を選択することもできます。
注意
Parquet version 1.0 には、uint32
型の変数をラウンドトリップできないという制限があります (こうした変数は int64
として MATLAB® に読み戻されます)。
制限
場合によっては、parquetwrite
は元の配列 T
を正確には表さないファイルを作成します。parquetread
または datastore
を使用してファイルを読み取る場合、結果の形式または内容は元の table と異なる可能性があります。詳細については、Apache Parquet データ型のマッピングを参照してください。
拡張機能
スレッドベースの環境
MATLAB® の backgroundPool
を使用してバックグラウンドでコードを実行するか、Parallel Computing Toolbox™ の ThreadPool
を使用してコードを高速化します。
この関数はスレッドベースの環境を完全にサポートしています。詳細については、スレッドベースの環境での MATLAB 関数の実行を参照してください。
バージョン履歴
R2019a で導入R2022b: 入れ子にされたデータの Parquet ファイルへの書き込み
parquetwrite
を使用して、入れ子にされた table 変数および timetable 変数を Parquet ファイルに書き込みます。
R2022b: スレッドベースの環境での関数の使用
この関数はスレッドベースの環境をサポートしています。
R2022a: Parquet ファイル データの行グループを判別して定義
Parquet ファイルでは異なる行グループとして行範囲を格納することで、粒度を向上させ、ターゲットを絞った解析を実現できます。parquetread
は名前と値の引数 RowGroups
を使用して、Parquet ファイル データの読み取り時に行グループを判別します。parquetwrite
は名前と値の引数 RowGroupHeights
を使用して、Parquet ファイル データの書き込み時に行グループを定義します。
R2022a: 入れ子にされたデータのエクスポート
入れ子にされた cell 配列を LIST 配列としてエクスポートできるようになりました。
R2021b: 元のタイム ゾーンで datetime を読み取りおよび書き込み
Parquet ファイルでは、タイム ゾーン対応のタイムスタンプは UTC タイム ゾーンでなければなりません。datetime を書き込む際に parquetwrite
は等価の UTC 値に変換し、Parquet ファイルのメタデータに元のタイム ゾーン値を格納します。parquetread
は格納されている元のタイム ゾーン値を使用してラウンドトリップを有効にします。
R2021a: Parquet データ形式の categorical データの使用
categorical
データ型が含まれた Parquet データを書き込みます。
R2020a: ファイルを書き込む際のエンコード スキームおよび Parquet バージョンを制御
関数 parquetwrite
には次の 2 つの新しい名前と値の引数があります。
'VariableEncoding'
は、Parquet ファイルが各変数でプレーン エンコードとディクショナリ エンコードのどちらを使用するのかを制御します。'Version'
は、ファイル形式で Parquet 1.0 と Parquet 2.0 のどちらを使用するのかを指定します。
R2019b: 任意の文字が含まれる表形式データの書き込み
スペースや非 ASCII 文字を含め、任意の Unicode 文字が含まれた変数名をもつ表形式データを書き込みます。スペースおよび非 ASCII 文字を含む変数名など、任意の変数名が含まれた表形式データを書き込むには、PreserveVariableNames
パラメーターを true
に設定します。
MATLAB コマンド
次の MATLAB コマンドに対応するリンクがクリックされました。
コマンドを MATLAB コマンド ウィンドウに入力して実行してください。Web ブラウザーは MATLAB コマンドをサポートしていません。
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)