Java 用它替换每个文件的内容';spark中的s标头值
我有一个包含多个文本文件的目录,我访问spark中的所有文件,如下所示Java 用它替换每个文件的内容';spark中的s标头值,java,apache-spark,Java,Apache Spark,我有一个包含多个文本文件的目录,我访问spark中的所有文件,如下所示 JavaRDD<String> filesRDD = sc.textFile(directoryName); I like 1 John eat 3 and 1 这意味着,如果内容中有一个“3”,它将映射到“lemon” 内容示例如下: JavaRDD<String> filesRDD = sc.textFile(directoryName); I like 1 John eat 3 and 1
JavaRDD<String> filesRDD = sc.textFile(directoryName);
I like 1
John eat 3 and 1
这意味着,如果内容中有一个“3”,它将映射到“lemon”
内容示例如下:
JavaRDD<String> filesRDD = sc.textFile(directoryName);
I like 1
John eat 3 and 1
等等
现在我需要做的是,首先从内容中筛选行,然后从映射中指定原始值。例如,第一个过滤器由字符串“like”
过滤,我得到“I like 1”
,然后,我用映射替换,然后“I like apple”
请注意,此映射头与每个文件不同。我该怎么做?因为我是spark的新手,所以我对如何实现这一点没有太多想法。你想要这样的东西吗
var fruitPair = sc.parallelize(List("1,apple","4,banana","3,lemon")).map{ str =>
var temp = str.split(",")
(temp(0), temp(1))
}
fruitPair.toDF.show()
var contents = List("I like 1", "John eat 3 and 1")
var results = contents.map { content =>
var tmpContent = content
fruitPair.collect.foreach { item =>
var index = tmpContent.indexOf(item._1)
if (index >= 0) {
tmpContent = tmpContent.replace(item._1, item._2)
}
}
tmpContent
}
results.foreach{ it => println(it) }
I like apple
John eat lemon and apple
results: List[String] = List(I like apple, John eat lemon and apple)