J'essaie d'écraser un Spark dataframe en utilisant l'option suivante dans PySpark mais je ne réussis pas
spark_df.write.format('com.databricks.spark.csv').option("header", "true",mode='overwrite').save(self.output_file_path)
la commande mode = overwrite échoue
Essayer:
spark_df.write.format('com.databricks.spark.csv') \
.mode('overwrite').option("header", "true").save(self.output_file_path)
Spark 1.4 et supérieur a une fonction csv intégrée pour le dataframewriter
https://spark.Apache.org/docs/latest/api/python/pyspark.sql.html#pyspark.sql.DataFrameWriter
par exemple.
spark_df.write.csv(path=self.output_file_path, header="true", mode="overwrite", sep="\t")
Quel est le sucre syntaxique pour
spark_df.write.format("csv").mode("overwrite").options(header="true",sep="\t").save(path=self.output_file_path)
Je pense que ce qui prête à confusion, c'est de trouver où exactement les options sont disponibles pour chaque format dans les documents.
Ces méthodes liées à l'écriture appartiennent à la classe DataFrameWriter
: https://spark.Apache.org/docs/latest/api/python/pyspark.sql.html#pyspark.sql.DataFrameWriter =
La méthode csv
dispose de ces options, également disponibles lors de l'utilisation de format("csv")
: https://spark.Apache.org/docs/latest/api/python/pyspark.sql .html # pyspark.sql.DataFrameWriter.csv
La manière dont vous devez fournir les paramètres dépend également du fait que la méthode utilise un seul argument (key, value)
Tuple ou mot clé. C'est assez standard dans la façon dont python fonctionne généralement bien que, en utilisant (* args, ** kwargs), il diffère simplement de la syntaxe Scala.
Par exemple, la méthode option(key, value)
prend une option comme un tuple comme option(header,"true")
et la méthode .options(**options)
prend un tas d'affectations de mots clés, par exemple .options(header="true",sep="\t")