对于烫伤,我需要:
按前3个字符对字符串字段进行分组
比较每组中所有成对的字符串,使用 edit-distance
公制(http://en.wikipedia.org/wiki/edit_distance)
将结果写入记录所在的csv文件 string; string; distance
将我使用的字符串分组 map
以及 groupBy
如下例所示:
import cascading.tuple.Fields
import com.twitter.scalding._
class Scan(args: Args) extends Job(args) {
val output = TextLine("tmp/out.txt")
val wordsList = List(
("aaaa"),
("aaabb"),
("aabbcc"),
("aaabccdd"),
("aaabbccdde"),
("aaabbddd"),
("bbbb"),
("bbbaaa"),
("bbaaabb"),
("bbbcccc"),
("bbbddde"),
("ccccc"),
("cccaaa"),
("ccccaabbb"),
("ccbbbddd"),
("cdddeee")
)
val orderedPipe =
IterableSource[(String)](wordsList, ('word))
.map('word -> 'key ){word:String => word.take(3)}
.groupBy('key) {_.toList[String]('word -> 'x) }
.debug
.write(output)
}
结果我得到:
['aaa', 'List(aaabbddd, aaabbccdde, aaabccdd, aaabb, aaaa)']
['aab', 'List(aabbcc)']
['bba', 'List(bbaaabb)']
['bbb', 'List(bbbddde, bbbcccc, bbbaaa, bbbb)']
['ccb', 'List(ccbbbddd)']
['ccc', 'List(ccccaabbb, cccaaa, ccccc)']
['cdd', 'List(cdddeee)']
现在,在这个例子中,我需要计算字符串的编辑距离 aaa
在此列表中输入:
List(aaabbddd, aaabbccdde, aaabccdd, aaabb, aaaa)
对于此列表中具有“bbb”键的所有字符串,下一步:
List(bbbddde, bbbcccc, bbbaaa, bbbb)
等。
要计算每个需要替换的组中所有字符串之间的编辑距离 toList
以我自己的功能,我怎么能做到这一点?以及如何将函数结果写入csv文件?
谢谢!
更新
如何获得 List
防止烫伤 Pipe
? toList
只是返回另一个 Pipe
所以我不能全部使用:
val orderedPipe =
IterableSource[(String)](wordsList, ('word))
.map('word -> 'key ){word:String => word.take(3)}
.groupBy('key) {_.toList[String]('word -> 'x) }
.combinations(2) //---ERROR! Pipe has no such method!
.debug
.write(output)
1条答案
按热度按时间w1jd8yoj1#
编辑距离可以按照维基百科中的描述进行计算:
查找列表元素的成对编辑距离:
在groupby中使用:
至于写入csv格式,您可以简单地使用
com.twitter.scalding.Csv
班级。write(Csv(outputFile))