2017-10-18 5 views
1

Nous commençons à collecter des données dans un cluster hadoop en utilisant des fichiers spark et parquet ... mais il nous est très difficile de garantir que le schéma du parquet ne changera pas dans le futur. Nous essayons de trouver la meilleure façon de lire parquet, même si des changements de schéma ...obtenir le dernier schéma pour dataframe partition parquetée

La règle que nous voulons mettre en œuvre est que le dernier fichier parquet sera notre référence ...

Nous avons fait différents tests, y compris :.

  • spark.read.parquet ("test") filtre ("année = 2017 et mois = 10 et jour> = 15")
  • spark.read.parquet ("test/an = 2017/mois = 10/jour = 17 "," test/année = 2017/mois = 10/jour = 16 "," test/année = 2017/mois = 10/jour = 15 ")
    • // testé avec ordre différent
  • spark.read.parquet ("test/an = 2017/mois = 10/jour = {} 15,16,17")

etc.

et le schéma retenu par la méthode read est toujours le schéma le plus ancien (ie celui du 15 octobre).

Est-ce que quelqu'un sait comment obtenir le dernier schéma (le 17 octobre)?

Bien sûr, spark.read.option ("mergeSchema", "true") ne fonctionne pas car il ne supprime pas une colonne si nous en avons supprimé une dans le dernier parquet. Nous avons fait un test sur 3 jours ici ... mais potentiellement il pourrait être sur une très large gamme de partitions.

Merci à l'avance

Cordialement

Répondre

0

Je vous écris ceci en pyspark. Devrait être applicable pour une autre langue.

schema = spark.read.parquet("test/year=2017/month=10/day=17/").schema 
df = spark.read.schema(schema).parquet("test/*/*/*/") 
+0

Merci beaucoup pour votre proposition ... Pour l'instant nous reconstruisons toute notre histoire, mais votre proposition est en effet très intéressant. – easyoups