【问题标题】:saveAsNewAPIHadoopFile changing the character encoding to UTF-8saveAsNewAPIHadoopFile 将字符编码更改为 UTF-8
【发布时间】:2017-08-04 13:05:55
【问题描述】:

我正在尝试将使用 saveAsNewAPIHadoopFile 编码的 ISO-8859-1 字符集的 RDD 保存到 AWS S3 存储桶 但是当它保存到 S3 存储桶时,它会将字符编码更改为 UTF-8。

代码sn-p

val cell = “ MYCOST £25” //This is in UTF-8 character encoding .  
val charset: Charset = Charset.forName(“ISO-8859-1”)    
val cellData = cell.padTo(50, “ “).mkString   

val  iso-data = new String(cellData.getBytes(charset), charset) // here it converts the string from UTF-8 to ISO-8859-1

但是当我使用 saveAsNewAPIHadoopFile 保存文件时,它会更改为 UTF-8 格式。 我认为 saveAsNewAPIHadoopFile TextOutputFormat 会自动将文件编码转换为 UTF-8。有没有办法可以将内容保存到具有相同编码 (ISO-8859-1) 的 S3 存储桶

ds.rdd.map { record =>  
    val cellData = record.padTo(50, “ “).mkString  
    new String(cellData.getBytes(“ISO-8859-1”), “ISO-8859-1”)
 }.reduce { _ + _ }
    }.mapPartitions { iter =>
      val text = new Text()
      iter.map { item =>
        text.set(item)
        (NullWritable.get(), text)
      }
    }.saveAsNewAPIHadoopFile(“”s3://mybucket/“, classOf[NullWritable], classOf[BytesWritable], classOf[TextOutputFormat[NullWritable, BytesWritable]])

感谢您的帮助

【问题讨论】:

    标签: hadoop apache-spark amazon-s3 utf-8 character-encoding


    【解决方案1】:

    我仍然没有得到正确的答案,但作为一种解决方法,我将文件复制到 HDFS 并使用 ICONV 将文件转换为 ISO 格式并保存回 S3 存储桶。这为我完成了这项工作,但它需要在 EMR 集群中执行额外的两个步骤。 我认为它可能对遇到相同问题的人有用

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-08-09
      • 1970-01-01
      • 1970-01-01
      • 2010-12-08
      • 1970-01-01
      • 2014-01-18
      • 2011-08-27
      相关资源
      最近更新 更多