この記事の内容
この記事では、Twitter社とCloudera社(米国のソフトウェア会社)で共同開発されたオープンソースの列指向(カラムナ)のデータストレージ形式である、「Apache Parquet」のファイルをプログラムで読み込む方法を紹介します。
プログラムはC#(.NET Core)を使用します。プログラムは単純に、スキーマ情報および行データを表示するサンプルを紹介します。
サンプルは以下のGitHubにて公開しています。
GitHub - remix-yh/ParquetSampleApp
Contribute to remix-yh/ParquetSampleApp development by creating an account on GitHub.
プログラム
Parquetファイルの読み込みは、Parquet.Netを使用します。Parquet.NetはNugetより取得できます。
プログラムは以下の通りです。
using Parquet;
using Parquet.Data;
using Parquet.Data.Rows;
using System;
using System.Linq;
namespace ParquetSampleApp
{
class Program
{
static void Main(string[] args)
{
// parquetファイル読込
Table table = ParquetReader.ReadTableFromFile("./data/sample.parquet");
//スキーマ情報の表示
ShowSchema(table.Schema);
Console.WriteLine();
//行データを表示
ShowRows(table);
}
static void ShowSchema(Schema schema)
{
Console.WriteLine("---------- Schema ----------");
foreach (var field in schema.GetDataFields())
{
Console.WriteLine($"Name={field.Name}, SchemaType={field.DataType}");
}
}
static void ShowRows(Table table)
{
Console.WriteLine("---------- Rows ----------");
foreach (var row in table)
{
string values = String.Join(",", row.Values.Select(v =>
{
if(v is byte[])
{
return BitConverter.ToString((byte[])v);
}
return v.ToString();
}).ToArray());
Console.WriteLine(values);
}
}
}
}
出力結果
---------- Schema ---------- Name=id, SchemaType=Int32 Name=bool_col, SchemaType=Boolean Name=tinyint_col, SchemaType=Int32 Name=smallint_col, SchemaType=Int32 Name=int_col, SchemaType=Int32 Name=bigint_col, SchemaType=Int64 Name=float_col, SchemaType=Float Name=double_col, SchemaType=Double Name=date_string_col, SchemaType=ByteArray Name=string_col, SchemaType=ByteArray Name=timestamp_col, SchemaType=DateTimeOffset ---------- Rows ---------- 0,True,0,0,0,0,0,0,30-31-2F-30-31-2F-30-39,30,2009/01/01 0:00:00 +00:00 1,False,1,1,1,10,1.1,10.1,30-31-2F-30-31-2F-30-39,31,2009/01/01 0:01:00 +00:00


コメント