将BytesWritable转换为(utf8编码)字符串

时间:2018-08-06 09:20:42

标签: java string scala apache-spark byte

Spark的新手。谷歌搜索此转换时,结果很少,我认为这应该是一个常见的操作(从序列文件中读取并解析每一行)。我发现了将BytesWritable转换为String的两种不同方法。原来方法1给出了错误的结果,原因有何建议?

val lines = spark
        .sparkContext
        .sequenceFile[org.apache.hadoop.io.BytesWritable, org.apache.hadoop.io.BytesWritable]("file://"+data_dir)

//Method-1
val wrong = lines
     .map(_._2)
     .map(byte => org.apache.hadoop.io.Text.decode(byte.getBytes())) 
     .flatMap(parseEachLine)

//Method-2
val correct = lines
     .map(_._2)
     .map(bytes => new String(bytes.copyBytes(), 0, bytes.getLength, "utf-8"))
     .flatMap(parseEachLine)

如果可能,请提示为什么没人问这个问题。这是否意味着这种转换是不必要的(如果为true,则如何拆分行并创建DataFrame)?

0 个答案:

没有答案