Écrire Étincelle dataframe CSV avec des partitions
Je suis en train d'écrire un dataframe dans une étincelle dans une HDFS emplacement, et j'espère que si je suis en ajoutant le partitionBy
notation Étincelle va créer une partition
(semblable à l'écriture en Parquet format)
dossier en forme de
partition_column_name=partition_value
( j'.e partition_date=2016-05-03
). Pour ce faire, j'ai exécuté la commande suivante :
(df.write
.partitionBy('partition_date')
.mode('overwrite')
.format("com.databricks.spark.csv")
.save('/tmp/af_organic'))
mais partition dossiers n'avaient pas été créés
toute idée de ce que dois-je faire pour que l'étincelle DF créer automatiquement les dossiers?
Merci,
OriginalL'auteur Lior Baber | 2016-05-29
Vous devez vous connecter pour publier un commentaire.
Étincelle 2.0.0+:
Intégré au format csv prend en charge le partitionnement de la boîte de sorte que vous pouvez simplement utiliser:
sans y compris les paquets supplémentaires.
Spark < 2.0.0:
En ce moment (v1.4.0)
spark-csv
ne prend pas en chargepartitionBy
(voir databricks/spark-csv#123), mais vous pouvez ajuster intégré dans les sources pour obtenir ce que vous voulez.Vous pouvez essayer deux approches différentes. En supposant que vos données est relativement simple (pas de complexes de chaînes et la nécessité pour le caractère d'échappement) et ressemble plus ou moins comme ceci:
Vous pouvez préparer manuellement les valeurs pour l'écriture:
et écrire à l'aide de
text
sourceDans les cas plus complexes, vous pouvez essayer d'utiliser la bonne CSV analyseur pour prétraiter les valeurs d'une manière similaire, soit à l'aide de l'UDF ou de cartographie plus de CA, mais il sera beaucoup plus cher.
Si le format CSV est pas difficile à condition que vous pouvez également utiliser JSON écrivain qui prend en charge
partitionBy
out-of-the-box:ainsi que la partition de la découverte à la lecture.
OriginalL'auteur zero323