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
除了文件名之外不接受任何参数