J'ai besoin de lire des fichiers de parquet à partir de plusieurs chemins qui ne sont pas des répertoires parents ou enfants.
par exemple,
dir1 ---
|
------- dir1_1
|
------- dir1_2
dir2 ---
|
------- dir2_1
|
------- dir2_2
sqlContext.read.parquet(dir1)
lit les fichiers de parquet à partir de dir1_1 et dir1_2
En ce moment, je lis chaque répertoire et fusionne des images en utilisant "unionAll". Existe-t-il un moyen de lire les fichiers de parquet à partir de dir1_2 et dir2_1 sans utiliser unionAll
ou existe-t-il un moyen élégant en utilisant unionAll
Merci
Un peu tard mais j'ai trouvé ceci pendant que je cherchais et cela peut aider quelqu'un d'autre ...
Vous pouvez également essayer de décompresser la liste d’arguments en spark.read.parquet()
paths=['foo','bar']
df=spark.read.parquet(*paths)
C'est pratique si vous voulez passer quelques blobs dans l'argument path:
basePath='s3://bucket/'
paths=['s3://bucket/partition_value1=*/partition_value2=2017-04-*',
's3://bucket/partition_value1=*/partition_value2=2017-05-*'
]
df=spark.read.option("basePath",basePath).parquet(*paths)
C'est cool car vous n'avez pas besoin de lister tous les fichiers du chemin de base, et vous obtenez toujours l'inférence de partition.
La méthode parquetFile de SQLContext
et la méthode parquet de DataFrameReader
suivent plusieurs chemins. Donc l'une ou l'autre de ces œuvres:
df = sqlContext.parquetFile('/dir1/dir1_2', '/dir2/dir2_1')
ou
df = sqlContext.read.parquet('/dir1/dir1_2', '/dir2/dir2_1')
Prenant juste la réponse de John Conley, et l'embellissant un peu et fournissant le code complet (utilisé dans Jupyter PySpark) car j'ai trouvé sa réponse extrêmement utile.
from hdfs import InsecureClient
client = InsecureClient('http://localhost:50070')
import posixpath as psp
fpaths = [
psp.join("hdfs://localhost:9000" + dpath, fname)
for dpath, _, fnames in client.walk('/eta/myHdfsPath')
for fname in fnames
]
# At this point fpaths contains all hdfs files
parquetFile = sqlContext.read.parquet(*fpaths)
import pandas
pdf = parquetFile.toPandas()
# display the contents nicely formatted.
pdf