我有一个文本文件,其中包含以下内容:
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)
...
我试图通过Map,并获得钥匙饲料一个新的Map与我的结果,但它没有工作。
下面是我的代码(更像伪代码):
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 occurrences >= 2
// AB;C-D
我想知道是否有可能在Spark-Scala中编写这样的基本代码,因为我在网上找不到任何满足我需求的答案。谢谢你的帮助。
1条答案
按热度按时间kpbwa7wx1#
您可以使用
map
和flatMap
的组合来实现您的要求,如您的输出应为
希望答案对大家有帮助