我有一个包含以下内容的文本文件:
A>B,C,D
B>A,C,D,E
C>A,B,D,E
D>A,B,C,E
E>B,C,D
我想写一个Spark-Scala脚本来获取以下内容: (对于每个左翼成员,我们都会给予所有合适的成员。)
(A,B)
(A,C)
(A,D)
(B,A)
(B,C)
(B,D)
(B,E)
...
我尝试浏览地图并获取密钥以使用我的结果提供新地图但不起作用。
这是我的代码(更像是伪代码):
import scala.io.Source
// Loading file
val file = sc.textFile("friends.txt")
// MAP
// A;B
// A;C
// ...
var associations_persons_friends:Map[Char,Char] = Map()
var lines = file.map(line=>line.split(">"))
for (line <- lines)
{
val person = line.key
for (friend <- line.value.split(","))
{
associations_persons_friends += (person -> friend)
}
}
associations_persons_friends.collect()
val rdd = sc.parallelize(associations_persons_friends)
rdd.foreach(println)
// GROUP
// For each possible pair, all associated values
// AB;B-C-D-A-C-D-E
// REDUCE
// For each pair we keep occurences >= 2
// AB;C-D
我想知道是否可以在Spark-Scala中编写这样的基本代码,因为我无法在网上找到我的需求。 谢谢你的帮助。
答案 0 :(得分:2)
您可以将map
和flatMap
组合为
val rdd = sc.textFile("path to the text file")
rdd.map(line => line.split(">")).flatMap(array => array(1).split(",").map(arr => (array(0), arr))).foreach(println)
您应该输出
(A,B)
(A,C)
(A,D)
(B,A)
(B,C)
(B,D)
(B,E)
(C,A)
(C,B)
(C,D)
(C,E)
(D,A)
(D,B)
(D,C)
(D,E)
(E,B)
(E,C)
(E,D)
我希望答案很有帮助