В искро-csv github: https://github.com/databricks/spark-csv
Можно прочитать:
blockquote>
codec
: кодек сжатия для использования при сохранении в файл. Должно быть полное имя класса, реализующего org.apache.hadoop.io.compress.CompressionCodec или один из нечувствительных к регистру сокращений имен (bzip2, gzip, lz4 и snappy).В вашем случае это должно работать:
df.write.format("com.databricks.spark.csv").codec("gzip")\ .save('my_directory/my_file.gzip')
Этот код работает для Spark 2.1, где .codec
недоступен.
df.write
.format("com.databricks.spark.csv")
.option("codec", "org.apache.hadoop.io.compress.GzipCodec")
.save(my_directory)
Для Spark 2.2 вы можете использовать опцию df.write.csv(...,codec="gzip")
, описанную здесь: https://spark.apache.org/docs/latest/api/python/pyspark.sql. HTML? изюминка = кодек
compression
. [Д0] spark.apache.org/docs/latest/api/python/…
– volker238
2 March 2018 в 17:53
Чтобы записать CSV-файл с заголовками и переименовать файл part-000 в .csv.gzip
DF.coalesce(1).write.format("com.databricks.spark.csv").mode("overwrite")
.option("header","true")
.option("codec",org.apache.hadoop.io.compress.GzipCodec").save(tempLocationFileName)
copyRename(tempLocationFileName, finalLocationFileName)
def copyRename(srcPath: String, dstPath: String): Unit = {
val hadoopConfig = new Configuration()
val hdfs = FileSystem.get(hadoopConfig)
FileUtil.copyMerge(hdfs, new Path(srcPath), hdfs, new Path(dstPath), true, hadoopConfig, null)
// the "true" setting deletes the source files once they are merged into the new output
}
Если вам не нужен заголовок, установите его в false, и вы не будете необходимо также выполнить объединение. Это будет быстрее написать тоже.
С Spark 2.0+ это стало немного проще:
df.write.csv("path", compression="gzip")
Вам больше не нужен внешний CSV-пакет Databricks.
Автор csv()
поддерживает несколько удобных опций. Например:
sep
: для установки символа разделителя. quote
: и как указывать значения. header
: Включить ли строку заголовка. В дополнение к gzip
также можно использовать еще несколько кодеков сжатия:
bzip2
lz4
snappy
deflate