使用Scala Spark,按照子字符串的索引对RDD进行排序

3

我刚开始接触Scala Spark,有一个问题想请教。

我有一个包含一亿两千万个字符串的RDD,我想要查找出所有包含指定子串的字符串,这一点我做得很好。

现在我的目标是将输出按照索引排序,以便先输出那些子串更靠近开头的字符串。

例如:

子串为:abcdefg

字符串如下:

s1 = tryuabcdefgyui

s2 = trabcdefgyui

s3 = abcdefgyuo

因此,我的期望输出应该是一个已排序的列表/ RDD {s3, s2, s1}。

请问最佳方法是什么?

1个回答

4

该想法是将RDD[String]转换为RDD[(String,Index)],其中索引是使用Java的String indexOf计算出来的。

// Dataset
val r = sc.makeRDD(Seq("abf", "ffff", "aaaaaabf", "ttggabf"))

// Sorting on index of substring "bf", only for those strings that contain "bf"
val sorted = r.map(s => (s, s.indexOf("bf"))).filter(_._2>0).sortBy(_._2)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接