web-dev-qa-db-fra.com

Comment visualiser le fichier Apache Parquet sous Windows?

Je n'ai trouvé aucune explication en anglais simple concernant les fichiers Apache Parquet. Tel que:

  1. Que sont-ils?
  2. Ai-je besoin de Hadoop ou de HDFS pour les visualiser/créer/les stocker?
  3. Comment créer des fichiers de parquet?
  4. Comment visualiser les fichiers de parquet?

Toute aide concernant ces questions est appréciée.

4
Sal

Qu'est-ce que Apache Parquet?

Apache Parquet est un format de fichier binaire qui stocke les données sous forme de colonnes. Les données contenues dans un fichier Parquet sont similaires à une table de style SGBDR dans laquelle vous avez des colonnes et des lignes. Mais au lieu d’accéder aux données ligne par ligne, vous y accédez généralement colonne par colonne.

Apache Parquet est l'un des formats de stockage Big Data modernes. Il présente plusieurs avantages, parmi lesquels:

  • Columnar storage: récupération efficace des données, compression efficace, etc.
  • Les métadonnées se trouvent à la fin du fichier: permet aux fichiers Parquet d'être générés à partir d'un flux de données. (commun dans les scénarios Big Data)
  • Supporté par tous les produits Big Data Apache

Ai-je besoin de Hadoop ou HDFS?

Les fichiers de parquet peuvent être stockés dans n'importe quel système de fichiers, pas seulement HDFS. Comme mentionné ci-dessus, il s'agit d'un format de fichier. C'est donc comme n'importe quel autre fichier où il a un nom et une extension .parquet. Ce qui se passera généralement dans les environnements Big Data, c’est qu’un jeu de données sera divisé (ou partitionné) en plusieurs fichiers de parquet pour encore plus d’efficacité.

Tous les produits Big Data Apache prennent en charge les fichiers Parquet par défaut. C'est pourquoi il peut sembler que cela ne peut exister que dans l'écosystème Apache.

Comment créer/lire des fichiers de parquet?

Comme mentionné, tous les produits Big Data Apache actuels tels que Hadoop, Hive, Spark, etc. prennent en charge les fichiers Parquet par défaut.

Il est donc possible d'utiliser ces systèmes pour générer ou lire des données de parquet. Mais c'est loin d'être pratique. Imaginez que pour lire ou créer un fichier CSV, vous deviez installer Hadoop/HDFS + Hive et les configurer. Heureusement, il existe d'autres solutions. 

Pour créer vos propres fichiers de parquet:

Pour afficher le contenu du fichier de parquet:

Existe-t-il d'autres méthodes?

Peut-être. Mais il n’en existe pas beaucoup et ils ne sont généralement pas bien documentés. Cela est dû au fait que Parquet est un format de fichier très compliqué (je ne pouvais même pas trouver de définition formelle). Ceux que j'ai énumérés sont les seuls que je connaisse au moment d'écrire cette réponse.

9
Sal

En plus de la réponse détaillée de @ sal, il y a une autre question que j'ai rencontrée dans ce contexte:

Comment puis-je accéder aux données d'un fichier de parquet avec SQL?

Comme nous sommes toujours dans le contexte Windows, je ne connais pas beaucoup de façons de le faire. Les meilleurs résultats ont été obtenus en utilisant Spark en tant que moteur SQL avec Python en tant qu’interface avec Spark. Cependant, je suppose que l'environnement Zeppelin fonctionne également, mais je ne l'ai pas encore essayé moi-même.

Il est très bien fait guide par Michael Garlanyk pour guider un à travers l'installation de la combinaison Spark/Python.

Une fois installé, je peux interagir avec les parquets via:

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])

Une fois vos parquets chargés de cette manière, vous pouvez interagir avec l’API de Pyspark, par exemple. via:

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

my_test_query.show()
1
nirolo

Ceci est maintenant possible via Apache Arrow , ce qui permet de simplifier la communication/le transfert entre différents formats de données, voir ma réponse ici ou la documentation officielle dans le cas de Python.

En gros, cela vous permet de lire et d’écrire rapidement des fichiers de parquet dans un pandas DataFrame comme la mode, ce qui vous donne les avantages d’utiliser notebooks pour afficher et gérer de tels fichiers comme si c’était un fichier csv normal.

0
meow