2 votes

Activer les fichiers _metadata dans Spark 2.1.0

Il semble que l'enregistrement de fichiers Parquet vides soit cassé dans Spark 2.1.0 car il n'est pas possible de les lire à nouveau (en raison d'une inférence de schéma défectueuse).

J'ai trouvé que depuis Spark 2.0 l'écriture du fichier _metadata est désactivée par défaut lors de l'écriture de fichiers parquet. Mais je n'arrive pas à trouver le paramètre de configuration permettant de le réactiver.

J'ai essayé ce qui suit :

spark_session = SparkSession.builder \
                        .master(url) \
                        .appName(name) \
                        .config('spark.hadoop.parquet.enable.summary-metadata', 'true') \
                        .getOrCreate()

et quelques autres combinaisons différentes comme sans spark.hadoop par exemple.

Le code que j'essaie d'exécuter dans PySpark :

spark_session = session.get_session()
sc = spark_session.sparkContext

df = spark_session.createDataFrame(sc.emptyRDD(), schema)

df.write.mode('overwrite').parquet(path, compression='none')

# this works
df = spark_session.read.schema(schema).parquet(path)

# This throws an error
df = spark_session.read.parquet(path)

0voto

Milan Points 322

Il s'agit d'un problème lié au comportement de sc.emptyRDD() . Vous pouvez trouver plus d'informations sur https://github.com/apache/spark/pull/12855 les raisons exactes de ce comportement.

La solution actuelle est la suivante : df = spark_session.createDataFrame(sc.emptyRDD(), schema).repartition(1) tout en conservant les paramètres de configuration mentionnés dans la question posée.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X