我使用spark 1.6.0和scala。
我想将Dataframe保存为压缩csv格式。
这是我到目前为止所拥有的(假设我已经拥有了) df
以及 sc
作为 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)
输出不在 gz
格式。
4条答案
按热度按时间0s0u357o1#
写入带有标题的csv文件并将part-000文件重命名为.csv.gzip
如果不需要头文件,那么将其设置为false,也不需要进行合并。写起来也会更快。
rhfm7lfc2#
此代码适用于spark 2.1,其中
.codec
不可用。对于spark 2.2,可以使用
df.write.csv(...,codec="gzip")
此处描述的选项:https://spark.apache.org/docs/latest/api/python/pyspark.sql.html?highlight=codecgpnt7bae3#
使用spark 2.0+,这变得简单了一些:
您不再需要外部databricks csv包了。
这个
csv()
writer支持许多方便的选项。例如:sep
:设置分隔符。quote
:是否以及如何引用值。header
:是否包含标题行。除此之外,您还可以使用其他一些压缩编解码器
gzip
:bzip2
lz4
snappydeflate
全速前进csv()
作者:python/scalaolqngx594#
Spark2.2+
df.write.option("compression","gzip").csv("path")
Spark2.0df.write.csv("path", compression="gzip")
Spark1.6在spark Hub上:https://github.com/databricks/spark-csv
人们可以阅读:
codec
:保存到文件时要使用的压缩编解码器。应该是实现org.apache.hadoop.io.compress.compressioncodec的类的完全限定名或不区分大小写的shorten名称之一(bzip2、gzip、lz4和snappy)。未指定编解码器时,默认为无压缩。在这种情况下,这是可行的:
df.write.format("com.databricks.spark.csv").codec("gzip")\ .save('my_directory/my_file.gzip')