web-dev-qa-db-ja.com

WindowsでApache Parquetファイルを表示する方法は?

Apache Parquetファイルに関するわかりやすい英語の説明が見つかりませんでした。といった:

  1. 彼らは何ですか?
  2. それらを表示/作成/保存するには、HadoopまたはHDFSが必要ですか?
  3. 寄せ木細工のファイルを作成するにはどうすればよいですか?
  4. 寄せ木細工のファイルを表示するにはどうすればよいですか?

これらの質問に関するヘルプを歓迎します。

13
Sal

Apache Parquetとは何ですか?

Apache Parquetは、列形式でデータを保存するバイナリファイル形式です。 Parquetファイル内のデータは、列と行があるRDBMSスタイルのテーブルに似ています。ただし、データに一度に1行ずつアクセスする代わりに、通常は一度に1列にアクセスします。

Apache Parquetは、現代のビッグデータストレージ形式の1つです。これにはいくつかの利点があり、そのいくつかは次のとおりです。

  • 円柱ストレージ:効率的なデータ検索、効率的な圧縮など...
  • メタデータはファイルの最後にあります:データのストリームからParquetファイルを生成できます。 (ビッグデータのシナリオで一般的)
  • すべてのApacheビッグデータ製品でサポート

HadoopまたはHDFSが必要ですか?

いいえ、寄木細工のファイルは、HDFSだけでなく、どのファイルシステムにも保存できます。前述のように、これはファイル形式です。そのため、名前と。parquet拡張子を持つ他のファイルとまったく同じです。ただし、ビッグデータ環境で通常発生するのは、1つのデータセットが複数の寄木細工ファイルに分割(またはパーティション分割)され、さらに効率化されることです。

すべてのApacheビッグデータ製品は、デフォルトでParquetファイルをサポートしています。そのため、Apacheエコシステムにしか存在できないように見えるかもしれません。

寄木細工のファイルを作成/読み込むにはどうすればよいですか?

前述のように、Hadoop、Hive、Sparkなどの現在のすべてのApacheビッグデータ製品は、デフォルトでParquetファイルをサポートしています。

そのため、これらのシステムを活用して、Parquetデータを生成または読み取ることができます。しかし、これは実用的ではありません。 CSVファイルを読み取ったり作成したりするには、Hadoop/HDFS + Hiveをインストールして構成する必要があると想像してください。幸いなことに、他の解決策があります。

独自の寄木細工のファイルを作成するには:

寄木細工のファイルの内容を表示するには:

他の方法はありますか?

おそらく。しかし、多くは存在せず、それらはほとんど文書化されていません。これは、Parquetが非常に複雑なファイル形式であるためです(正式な定義さえ見つけられませんでした)。私がリストしたものは、私がこの応答を書いているときに知っている唯一のものです

17
Sal

これは Apache Arrow で可能になり、異なるデータ形式間の通信/転送を簡素化するのに役立ちます。私の答え here または official docs を参照してくださいPythonの場合。

基本的には、pandas DataFrameのような方法で寄木細工のファイルをすばやく読み書きでき、notebooksを使用して、通常のcsvファイルのようにこれらのファイルを表示および処理できるという利点があります。

4
meow

@salの広範な答えに加えて、この文脈で出会ったもう1つの質問があります。

SQLを使用して寄木細工のファイルのデータにアクセスするにはどうすればよいですか?

ここではまだWindowsコンテキストにいるので、その方法はそれほど多くないことを知っています。 SQLエンジンとして Spark を使用し、Sparkへのインターフェイスとして Python を使用することで、最良の結果が得られました。ただし、 Zeppelin 環境も同様に機能すると想定していますが、まだ自分で試してはいません。

Michael Garlanykによる非常によくできたガイドがあります Spark/Pythonの組み合わせのインストールをガイドします。

設定が完了すると、寄木細工とやり取りできるようになります。

from os import walk
from pyspark.sql import SQLContext

sc = SparkContext.getOrCreate()
sqlContext = SQLContext(sc)

parquetdir = r'C:\PATH\TO\YOUR\PARQUET\FILES'

# Getting all parquet files in a dir as spark contexts.
# There might be more easy ways to access single parquets, but I had nested dirs
dirpath, dirnames, filenames = next(walk(parquetdir), (None, [], []))

# for each parquet file, i.e. table in our database, spark creates a tempview with
# the respective table name equal the parquet filename
print('New tables available: \n')

for parquet in filenames:
    print(parquet[:-8])
    spark.read.parquet(parquetdir+'\\'+parquet).createOrReplaceTempView(parquet[:-8])

このように寄木細工を読み込んだら、Pyspark APIを操作できます。経由:

my_test_query = spark.sql("""
select
  field1,
  field2
from parquetfilename1
where
  field1 = 'something'
""")

my_test_query.show()
2
nirolo