Je n'ai trouvé aucune explication en anglais simple concernant les fichiers Apache Parquet. Tel que:
Toute aide concernant ces questions est appréciée.
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:
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.
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.
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:
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()
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.