Scala 在Spark中进行文本处理时,使用\u00c3记录delimeter问题

Scala 在Spark中进行文本处理时,使用\u00c3记录delimeter问题,scala,apache-spark,utf-8,iso-8859-1,delimited-text,Scala,Apache Spark,Utf 8,Iso 8859 1,Delimited Text,我在.R101206文件文本中有如下数据。 2019-07-15 13:35:21 34567890一般NÃ 2019-07-15 13:35:21 34567891概述 2019-07-15 13:35:21 34567892概述 我试图使用下面的Spark读取带有分隔符\u00C3\u000AÃLF的文件,但它总是返回计数1 val path = "/filepath/file1.R011206" val recDelimiter = "\u00c3\u000a" var conf = sp

我在.R101206文件文本中有如下数据。 2019-07-15 13:35:21 34567890一般NÃ 2019-07-15 13:35:21 34567891概述 2019-07-15 13:35:21 34567892概述

我试图使用下面的Spark读取带有分隔符\u00C3\u000AÃLF的文件,但它总是返回计数1

val path = "/filepath/file1.R011206"
val recDelimiter = "\u00c3\u000a"
var conf = spark.sparkContext.hadoopConfiguration
conf.set("textinputformat.record.delimiter", recDelimiter)
val rawRDD = spark
.sparkContext
.newAPIHadoopFile(path, classOf[TextInputFormat], classOf[LongWritable], classOf[Text], conf)
.map(_._2.toString)
rawRDD.count()
输出:res180:Long=1

我们可以用波浪号忽略Ã拉丁文A,但我需要使用这个分隔符来获取记录,因为我们在其中一个字段值的内容中有行FeedLF。因此,我试图用这个分隔符来读取记录,以区分记录。 你能帮助我怎样才能正确地阅读它吗?

我认为你对Ã的解码是错误的

val recDelimiter = "\u00c3\u000a"
println("Ã" == recDelimiter) 
//false

for (line <- Source.fromFile(path).getLines()) {
    println(line.contains(recDelimiter))
    //false
}

请以预先格式化的字符串提供文本文件.R011206的样本数据好吗?当前数据在一行中,Ã后面的字符似乎是一个空格,而不是所声明的LF。由于这一点,很难制作这一版本。我们在195年之后的每一张唱片都有换行。它看起来像你自己。最后,我可以使用sc.binaryFiles从文件中获取每条记录。这是代码块。val rawRDD=sparkSession.sparkContext.binaryFilespath.mapValuescontent=>new Stringcontent.toArray,StandardCharsets.ISO_8859_1.toString.map.\u 2.toString.flatMap.split\u00c3\u000a,-1.mapx=>path,xIn每条记录,我们都有带行FeedLF的Ã。因此,我添加了\u00c3\u000a。无论如何,我尝试使用\u00c3,但存在相同的问题。此外,我可以看到▒ 当我在Git bash中获得第一行记录时,使用的是哪种Spark版本?上面提到的2.4.3对我有效,我得到了3行。我正在使用Zepplin来测试这一点。spark版本是2.2.0。如果我修改了文件并保存了它,那么我得到了3行。但是如果我们尝试使用原始文件,我无法使用该分隔符获取记录。最后,我可以使用sc.binaryFiles从文件中获取每条记录。这是代码块。val rawRDD=sparkSession.sparkContext.BinaryFilePath.mapValuescontent=>new Stringcontent.toArray,StandardCharsets.ISO_8859_1.toString.map.\u 2.toString.flatMap.split\u00c3\u000a,-1.mapx=>path,x
val recDelimiter = "\u00c3"
println("Ã" == recDelimiter) 
//true

var conf = spark.sparkContext.hadoopConfiguration
conf.set("textinputformat.record.delimiter", recDelimiter)

val rawRDD = spark
  .sparkContext
  .newAPIHadoopFile(path, classOf[TextInputFormat], classOf[LongWritable], classOf[Text], conf)
  .map(_._2.toString)
println(rawRDD.count()) //3