Lire tout le Parquet, les fichiers enregistrés dans un dossier via Spark
J'ai un dossier contenant Parquet fichiers. Quelque chose comme ceci:
scala> val df = sc.parallelize(List(1,2,3,4)).toDF()
df: org.apache.spark.sql.DataFrame = [value: int]
scala> df.write.parquet("/tmp/test/df/1.parquet")
scala> val df = sc.parallelize(List(5,6,7,8)).toDF()
df: org.apache.spark.sql.DataFrame = [value: int]
scala> df.write.parquet("/tmp/test/df/2.parquet")
Après l'enregistrement dataframes quand je vais lire tout le parquet fichiers dans df
dossier, il me donne l'erreur.
scala> val read = spark.read.parquet("/tmp/test/df")
org.apache.spark.sql.AnalysisException: Unable to infer schema for Parquet. It must be specified manually.;
at org.apache.spark.sql.execution.datasources.DataSource$$anonfun$8.apply(DataSource.scala:189)
at org.apache.spark.sql.execution.datasources.DataSource$$anonfun$8.apply(DataSource.scala:189)
at scala.Option.getOrElse(Option.scala:121)
at org.apache.spark.sql.execution.datasources.DataSource.org$apache$spark$sql$execution$datasources$DataSource$$getOrInferFileFormatSchema(DataSource.scala:188)
at org.apache.spark.sql.execution.datasources.DataSource.resolveRelation(DataSource.scala:387)
at org.apache.spark.sql.DataFrameReader.load(DataFrameReader.scala:152)
at org.apache.spark.sql.DataFrameReader.parquet(DataFrameReader.scala:441)
at org.apache.spark.sql.DataFrameReader.parquet(DataFrameReader.scala:425)
... 48 elided
Je sais que je peux lire Parquet fichiers en donnant pleine chemin, mais ce serait mieux si il y a un moyen de lire tout le parquet, les fichiers dans un dossier.
Vous devez vous connecter pour publier un commentaire.
Spark n'a pas d'écriture/lecture du parquet de la façon dont vous pensez qu'il fait.
Il utilise Hadoop bibliothèque de lecture/écriture partitionné parquet de fichier.
Ainsi votre première parquet fichier est sous le chemin
/tmp/test/df/1.parquet/
où1.parquet
est un répertoire. Cela signifie que lors de la lecture de parquet vous devez fournir le chemin d'accès à votre parquet répertoire ou le chemin d'accès si c'est un fichier.Je vous conseille de lire la documentation officielle pour plus de détails. [cf. SQL-Guide de Programmation - Parquet Fichiers]
EDIT:
Vous devez être à la recherche de quelque chose comme ceci :
Vous pouvez également utiliser des caractères génériques dans vos chemins d'accès aux fichiers d'URI.
Et vous pouvez fournir plusieurs fichiers chemins comme suit :
1.parquet
sera un répertoire. En fait, je veux lire tout le parquet, répertoires dans un dossier via Spark.val df = sqlContext.read.load("/tmp/test/df/*")
a fonctionné pour moi.Dataset<Row> df = spark.read().json("adl://xxxxxxxxx.azuredatalakestore.net/test/data.json"); df.write().mode("overwrite").parquet("data.parquet"); Dataset<Row> newDataDF = spark.read().parquet("data.parquet/") ;
Il montre même erreur"org.apache.spark.sql.AnalysisException: Unable to infer schema for Parquet. It must be specified manually.;"
pouvez-vous svp m'aider ?Le fichier que vous avez écrit sur
/tmp/test/df/1.parquet
et/tmp/test/df/2.parquet
ne sont pas un fichier de sortie, ils sont Répertoire de sortie.ainsi, vous pouvez lire le parquet s'est