如何在spark scala中用换行符替换双引号

如何在spark scala中用换行符替换双引号,scala,apache-spark,apache-spark-sql,rdd,Scala,Apache Spark,Apache Spark Sql,Rdd,我是新手。我有一个巨大的文件,里面有如下数据- 18765967790@18765967790@T@20130629@00@31@2981546 " "18765967790@18765967790@T@20130629@19@18@3240165 " "18765967790@18765967790@T@20130629@18@18@1362836 13478756094@13478756094@T@20130629@31@26@2880701 " "13478756094@134787560

我是新手。我有一个巨大的文件,里面有如下数据-

18765967790@18765967790@T@20130629@00@31@2981546 " "18765967790@18765967790@T@20130629@19@18@3240165 " "18765967790@18765967790@T@20130629@18@18@1362836
13478756094@13478756094@T@20130629@31@26@2880701 " "13478756094@13478756094@T@20130629@19@18@1230206 " "13478756094@13478756094@T@20130629@00@00@1631440
40072066693@40072066693@T@20130629@79@18@1270246 " "40072066693@40072066693@T@20130629@79@18@3276502 " "40072066693@40072066693@T@20130629@19@07@3321860
我正在尝试用新行字符替换“”,以便我的输出如下所示-

18765967790@18765967790@T@20130629@00@31@2981546 
18765967790@18765967790@T@20130629@19@18@3240165 
18765967790@18765967790@T@20130629@18@18@1362836
13478756094@13478756094@T@20130629@31@26@2880701 
13478756094@13478756094@T@20130629@19@18@1230206 
13478756094@13478756094@T@20130629@00@00@1631440
40072066693@40072066693@T@20130629@79@18@1270246 
40072066693@40072066693@T@20130629@79@18@3276502 
40072066693@40072066693@T@20130629@19@07@3321860
我试过了-

val fact1 =  sc.textFile("s3://abc.txt").map(x=>x.replaceAll("\"","\n"))
但这似乎不起作用。有人能告诉我我错过了什么吗

Edit1-我的最终输出将是一个数据帧,在使用delimeter“@”进行拆分后,将强制使用模式

我的压力越来越小了-

scala> fact1.take(5).foreach(println)
18765967790@18765967790@T@20130629@00@31@2981546

18765967790@18765967790@T@20130629@19@18@3240165

18765967790@18765967790@T@20130629@18@18@1362836
13478756094@13478756094@T@20130629@31@26@2880701

13478756094@13478756094@T@20130629@19@18@1230206

13478756094@13478756094@T@20130629@00@00@1631440
40072066693@40072066693@T@20130629@79@18@1270246

40072066693@40072066693@T@20130629@79@18@3276502

40072066693@40072066693@T@20130629@19@07@3321860

我得到额外的空行,这是进一步困扰我创建数据帧。这在这里看起来很简单,但是文件很大,而且包含“”的行也很长。在这个问题上,我只加了两个双引号,但它们的数字可以超过40-50

您可能缺少隐式编码器,请尝试以下代码

spark.read.text("src/main/resources/doubleQuoteFile.txt").map(row => {
      row.getString(0).replace("\"","\n") // looking to replace " " with next line
      row.getString(0).replace("\" \"","\n") // looking to replace " " with next line
    })(org.apache.spark.sql.Encoders.STRING)

文本之间有多个引号,这会创建多个换行符。您需要在替换之前删除其他引号,或者在替换之后删除空行:

.map(x=>x.replaceAll("\"","\n").replaceAll("(?m)^[ \t]*\r?\n", ""))

参考资料:

您的输出是什么?可能您想这样替换它
x.replaceAll(“\”,“\n”)
您所做的是正确的,您的实际输出是什么?试着在下面看看区别:
val file=spark.sparkContext.textFile(“sc.textFile(\'s3://abc.txt\”))file.foreach(print)val fact1=file.map(x=>x.replaceAll(\'',“\n”))fact1.foreach(print)
@Belwal我得到了一些空白行,我认为这是因为有多个引号。但是没有其他方法来替换所有的内容吗“在spark中使用换行符或任何其他字符?spark提供了一种转换数据的方法(如本例中的map)。现在,您想要转换什么取决于您自己。我们只是在操纵弦,这也可以用不同的方式来完成,而spark与之无关。