Scala 控件配置设置Apache Spark UTF编码,以便将其写入saveAsTextFile

Scala 控件配置设置Apache Spark UTF编码,以便将其写入saveAsTextFile,scala,utf-8,apache-spark,utf,Scala,Utf 8,Apache Spark,Utf,那么,在使用saveAsTextFile(path)时,如何告诉spark使用哪个UTF呢?当然,如果已知所有字符串都是UTF-8,那么它将节省磁盘空间2倍!(假设默认UTF与java一样为16)saveAsTextFile实际使用hadoop中的文本,该文本编码为UTF-8 def saveAsTextFile(path: String, codec: Class[_ <: CompressionCodec]) { this.map(x => (NullWritable.g

那么,在使用
saveAsTextFile(path)
时,如何告诉spark使用哪个UTF呢?当然,如果已知所有字符串都是UTF-8,那么它将节省磁盘空间2倍!(假设默认UTF与java一样为16)

saveAsTextFile
实际使用hadoop中的
文本,该文本编码为UTF-8

def saveAsTextFile(path: String, codec: Class[_ <: CompressionCodec]) {
    this.map(x => (NullWritable.get(), new Text(x.toString)))
      .saveAsHadoopFile[TextOutputFormat[NullWritable, Text]](path, codec)
  }
def saveAsTextFile(路径:字符串,编解码器:类[(NullWritable.get(),新文本(x.toString)))
.saveAsHadoopFile[TextOutputFormat[NullWritable,Text]](路径,编解码器)
}
从Text.java:

public class Text extends BinaryComparable
    implements WritableComparable<BinaryComparable> {

  static final int SHORT_STRING_MAX = 1024 * 1024;

  private static ThreadLocal<CharsetEncoder> ENCODER_FACTORY =
    new ThreadLocal<CharsetEncoder>() {
      protected CharsetEncoder initialValue() {
        return Charset.forName("UTF-8").newEncoder().
               onMalformedInput(CodingErrorAction.REPORT).
               onUnmappableCharacter(CodingErrorAction.REPORT);
    }
  };

  private static ThreadLocal<CharsetDecoder> DECODER_FACTORY =
    new ThreadLocal<CharsetDecoder>() {
    protected CharsetDecoder initialValue() {
      return Charset.forName("UTF-8").newDecoder().
             onMalformedInput(CodingErrorAction.REPORT).
             onUnmappableCharacter(CodingErrorAction.REPORT);
    }
  };
公共类文本扩展了二进制代码
实现可写可比较{
静态最终整数短字符串最大值=1024*1024;
专用静态线程本地编码器\u工厂=
新ThreadLocal(){
受保护的CharsetEncoder初始值(){
返回Charset.forName(“UTF-8”).newEncoder()。
onMalformedInput(CodingErrorAction.REPORT)。
onUnmappableCharacter(CodingErrorAction.REPORT);
}
};
专用静态线程本地解码器\u工厂=
新ThreadLocal(){
受保护的CharsetDecoder initialValue(){
返回Charset.forName(“UTF-8”).newDecoder()。
onMalformedInput(CodingErrorAction.REPORT)。
onUnmappableCharacter(CodingErrorAction.REPORT);
}
};
如果您想另存为UTF-16,我想您可以使用
org.apache.hadoop.io.BytesWritable
使用
saveAsHadoopFile
,并获取java
字符串的字节(正如您所说,将是UTF-16)。类似这样的内容:
saveAsHadoopFile[SequenceFileOutputFormat[NullWritable,BytesWritable]](路径)


您可以从
“…”中获取字节。getBytes(“UTF-16”)

我想说的是,只需使用hadoop输出格式,
saveAsTextFile
除了文件名之外不接受任何参数