如何将DataFrame保存为压缩(gzip)CSV?

use*_*641 16 csv scala apache-spark spark-dataframe

我使用Spark 1.6.0和Scala.

我想将DataFrame保存为压缩CSV格式.

这是我到目前为止(假设我已经拥有dfscas SparkContext):

//set the conf to the codec I want
sc.getConf.set("spark.hadoop.mapred.output.compress", "true")
sc.getConf.set("spark.hadoop.mapred.output.compression.codec", "true")
sc.getConf.set("spark.hadoop.mapred.output.compression.codec", "org.apache.hadoop.io.compress.GzipCodec")
sc.getConf.set("spark.hadoop.mapred.output.compression.type", "BLOCK")

df.write
  .format("com.databricks.spark.csv")
  .save(my_directory)
Run Code Online (Sandbox Code Playgroud)

输出gz格式不正确.

小智 25

此代码适用于Spark 2.1,但.codec不可用.

df.write
  .format("com.databricks.spark.csv")
  .option("codec", "org.apache.hadoop.io.compress.GzipCodec")
  .save(my_directory)
Run Code Online (Sandbox Code Playgroud)

对于Spark 2.2,您可以使用df.write.csv(...,codec="gzip")此处描述的选项:https://spark.apache.org/docs/latest/api/python/pyspark.sql.html?highlightlight =codec

  • 虽然此代码可能会回答这个问题,但提供有关此代码为何和/或如何回答问题的其他背景可提高其长期价值. (2认同)
  • 看起来关键字参数已经改为`compression`.https://spark.apache.org/docs/latest/api/python/pyspark.sql.html?highlight=codec#pyspark.sql.DataFrameWriter.csv (2认同)

Nic*_*mas 21

使用Spark 2.0+,这变得有点简单:

df.write.csv("path", compression="gzip")
Run Code Online (Sandbox Code Playgroud)

您不再需要外部Databricks CSV软件包.

csv()作家支持多种方便的选择.例如:

  • sep:设置分隔符.
  • quote:是否以及如何引用值.
  • header:是否包含标题行.

除了以下内容之外,您还可以使用许多其他压缩编解码器gzip:

  • bzip2
  • lz4
  • snappy
  • deflate

编写器的完整Spark文档在csv()这里:Python/Scala

  • 我必须在Spark 2.2中使用df.write.option(“ compression”,“ gzip”)。csv(“ path”)`。 (7认同)
  • 感谢您链接到 csv writer 文档,而不是只给出数据块的答案! (3认同)

Ale*_*tin 9

在spark-csv github上:https: //github.com/databricks/spark-csv

人们可以读到:

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')