java—用spark中的头文件值替换每个文件的内容

o4tp2gmn  于 2021-05-27  发布在  Spark
关注(0)|答案(1)|浏览(345)

我有一个包含多个文本文件的目录,我访问spark中的所有文件,如下所示,

JavaRDD<String> filesRDD = sc.textFile(directoryName);

在每个文件中,第一行是包含一些Map值的头。例如:-

"1,apple|4,banana|3,lemon"

这意味着,如果在内容中有一个“3”,它将Map到“lemon”。
内容示例如下:,

I like 1
John eat 3 and 1

等等。
现在我需要做的是,首先从内容中筛选行,然后从Map中指定原始值。例如,字符串的第一个过滤器 "like" 我得到了 "I like 1" 然后,我替换为Map,然后 "I like apple" 请注意,此Map头与每个文件不同。我该怎么做?因为我是spark的新手,所以我对如何实现这个目标没有太多想法。

carvr3hs

carvr3hs1#

你想要这样的东西吗?

var fruitPair = sc.parallelize(List("1,apple","4,banana","3,lemon")).map{ str => 
    var temp = str.split(",")
    (temp(0), temp(1))
}
fruitPair.toDF.show()
+---+------+
| _1|    _2|
+---+------+
|  1| apple|
|  4|banana|
|  3| lemon|
+---+------+
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)

相关问题