问题重现

rdd.repartition(1).write.csv(outPath)

写文件之后发现文件是压缩过的

write时首先会获取hadoopConf,然后从中获取是否压缩以及压缩格式

org.apache.spark.sql.execution.datasources.DataSource

  def write(

org.apache.spark.sql.execution.datasources.InsertIntoHadoopFsRelationCommand

    val hadoopConf = sparkSession.sessionState.newHadoopConfWithOptions(options)

org.apache.hadoop.mapreduce.lib.output.TextOutputFormat

    public RecordWriter<K, V> getRecordWriter(TaskAttemptContext job) throws IOException, InterruptedException {Configuration conf = job.getConfiguration();boolean isCompressed = getCompressOutput(job);String keyValueSeparator = conf.get(SEPERATOR, "\t");CompressionCodec codec = null;String extension = "";if (isCompressed) {Class<? extends CompressionCodec> codecClass = getOutputCompressorClass(job, GzipCodec.class);codec = (CompressionCodec)ReflectionUtils.newInstance(codecClass, conf);extension = codec.getDefaultExtension();}

isCompressed取的是mapreduce.output.fileoutputformat.compress,codecClass取的是mapreduce.output.fileoutputformat.compress.codec

hadoopConf初始化过程为

org.apache.spark.sql.internal.SessionState

  def newHadoopConf(): Configuration = {val hadoopConf = new Configuration(sparkSession.sparkContext.hadoopConfiguration)

org.apache.spark.SparkContext

  _hadoopConfiguration = SparkHadoopUtil.get.newConfiguration(_conf)def newConfiguration(conf: SparkConf): Configuration = {val hadoopConf = new Configuration()appendS3AndSparkHadoopConfigurations(conf, hadoopConf)hadoopConf}def appendS3AndSparkHadoopConfigurations(conf: SparkConf, hadoopConf: Configuration): Unit = {...conf.getAll.foreach { case (key, value) =>if (key.startsWith("spark.hadoop.")) {hadoopConf.set(key.substring("spark.hadoop.".length), value)}}

hadoopConf默认会从classpath中加载所有的hadoop相关配置文件,可以通过spark-shell来简单测试:

scala> val hc = spark.sparkContext.hadoopConfiguration

hc: org.apache.hadoop.conf.Configuration = Configuration: core-default.xml, core-site.xml, mapred-default.xml, mapred-site.xml, yarn-default.xml, yarn-site.xml, hdfs-default.xml, hdfs-site.xml

scala> println(hc.get("mapreduce.output.fileoutputformat.compress"))

true

scala> println(hc.get("mapreduce.output.fileoutputformat.compress.codec"))

org.apache.hadoop.io.compress.DefaultCodec

综上,只需要在创建SparkConf的时候设置spark.hadoop.mapreduce.output.fileoutputformat.compress=false即可不压缩,

val sparkConf = new SparkConf().set("spark.hadoop.mapreduce.output.fileoutputformat.compress", "false")

另外还可以通过option来控制

rdd.repartition(1).write.option("compression", "none").csv(outPath)

转载于:https://www.cnblogs.com/barneywill/p/10109568.html

【原创】大叔问题定位分享(12)Spark保存文本类型文件(text、csv、json等)到hdfs时为什么是压缩格式的...相关推荐

  1. 【原创】大叔问题定位分享(11)Spark中对大表子查询加limit为什么会报Broadcast超时错误...

    当两个表需要join时,如果一个是大表,一个是小表,正常的map-reduce流程需要shuffle,这会导致大表数据在节点间网络传输,常见的优化方式是将小表读到内存中并广播到大表处理,避免shuff ...

  2. 【原创】大叔问题定位分享(4)Kafka集群broker节点从zookeeper上消失

    kafka_2.8.0-0.8.1 一 现象 生产环境一组kafka集群经常发生问题,现象是kafka在zookeeper上的broker节点消失,此时kafka进程和端口都在,然后每个broker都 ...

  3. impala java 堆内存配置_【原创】大叔问题定位分享(38)impala报错内存不足

    impala有时查询报错内存不足,并持续一段时间后自动恢复,报错时日志如下: org.apache.hive.service.cli.HiveSQLException: ExecQueryFInsta ...

  4. 【原创】大叔问题定位分享(33)oozie提交任务报错ArithmeticException: / by zero

    oozie提交workflow后执行task报错: 2019-07-04 17:19:00,559 ERROR [RMCommunicator Allocator] org.apache.hadoop ...

  5. 【原创】大叔问题定位分享(33)beeline连接presto报错

    hive2.3.4 presto0.215 使用hive2.3.4的beeline连接presto报错 $ beeline -d com.facebook.presto.jdbc.PrestoDriv ...

  6. vim 变成只读了_Vim 强制保存只读类型文件的方法

    发现问题: 在使用vim时,当我们以普通用户去打开一个只有root用户才有权限操作的文件时,我们编辑完成之后,正要保存,却发现,这个文件我们没有权限修改. 每次遇到这样的问题,我都很头疼,好不容易把文 ...

  7. Vim 强制保存只读类型文件的方法

    发现问题: 在使用vim时,当我们以普通用户去打开一个只有root用户才有权限操作的文件时,我们编辑完成之后,正要保存,却发现,这个文件我们没有权限修改. 每次遇到这样的问题,我都很头疼,好不容易把文 ...

  8. 爬取豆瓣TOP250并将数据保存为txt文件和csv文件并存入MySQL数据库

    项目源码 import requests # 发起请求的库 from fake_useragent import UserAgent # 构造user-Agent的库 import mysql.con ...

  9. 数据库(一)数据类型:BLOB数据类型的读取办法,它可以用来保存Byte[]类型的图片信息。

    参考: http://www.shareblogs.top/402/ https://www.cnblogs.com/demi-pansha/p/5742105.html https://www.2c ...

最新文章

  1. Java中使用FTPClient上传下载
  2. 为什么要用GCD-Swift2.x
  3. 【ARM】数据操作指令(下)
  4. matplotlib plt.plot
  5. sql中join与left-join图解区别
  6. 45分钟,411个中小品牌天猫双11实现新跨越
  7. 利用FSMT进行文件服务器迁移及整合
  8. 警惕“***性社工”现象
  9. Java 蓝桥杯 字符串基本用法
  10. Spring MVC学习笔记——SiteMesh的使用(转)
  11. 程序员梗_那些程序员才懂的梗,看到第10张笑喷了,网友:太真实了
  12. 一步一步安装 Windows Server 2008 Beta3(Code Name Longhorn)
  13. 宝藏 窗帘 窗布VRay材质球素材推荐
  14. mysql 等距随机_随机起点对称等距抽样公式的简便运用
  15. 怎么使计算机桌面整洁,如何管理电脑桌面,让桌面清洁,干净,大气......
  16. 77、基于STM32单片机的超市餐饮二维码/条形码摄像头识别结账扫码系统设计
  17. C语言遍历windows目录文件 并对文件进行读写操作
  18. Go内存溢出与内存泄露
  19. Windows 7下载
  20. 对TCG的概要分析和对TPM的学习-可信根说明以及RTM(二)

热门文章

  1. 算法学习入门书籍 -- 2022.02.13
  2. NOIP2015普及组第1题 45 金币 方法三(python3实现)
  3. 1.5 编程基础之循环控制 11 整数的个数(2022.01.09)--python
  4. Qt工作笔记-代理及自定义委托,实现开关功能
  5. Qt工作笔记-仿大佬风格代码(使用#ifdef Q_OS_WIN32)
  6. linux cpu load 详解,理解linux cpu load - 什么时候应该担心了
  7. Java单机部署,Nacos docker单机模式部署实现过程详解
  8. TCP客户端服务器(Python)
  9. mysql并发_MySQL并发更新数据时的处理方法
  10. python如何画虚线_Python威力巨大,五分钟如何绘制出漂亮的系统架构图?