如何在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与之无关。