Spark - Scala:处理一行后返回多个<键,值>



我有一个数据集,看起来像下面-

0—1,2,4
1—0,4
2—0,4
4—2、1、0

我想读取每一行并将其转换为

下面的样式

//显示第0 - 1,2,4行
(0,1) <2,4>
(1, 2) <1,4>

//显示第1—0,4行
(0,1) <4>
(1,4) <0>

//较小的数总是先出现在对中

。,读取以"——"分隔符分隔的每行。所以我从数据集的第一行得到0和1,2,4。之后,我想创建pair。例如,(0,1)将是转换后映射的键,其值应为2,4。

完成后,我希望能够按键

分组值

例如(0,1)<2,4> <4>

和它们相交得到4.

有可能这样做吗?我的方法对吗?

我已经写了下面的代码到目前为止-

var mapOperation = logData.map(x=>x.split("t")).filter(x => x.length == 2).map(x => (x(0),x(1)))
// reading file and creating the map Example - key 0 value 1,2,4
//from the first map, trying to create pairs
var mapAgainstValue = mapOperation.map{
line =>
val fromFriend = line._1
val toFriendsList = line._2.split(",")
(fromFriend -> toFriendsList)
}
val newMap = mapAgainstValue.map{
line =>
var key ="";
for(userIds <- line._2){
key =line._1.concat(","+userIds);
(key -> line._2.toList)
}
}

问题是我不能在newMap上调用groupByKey。我猜我创建地图的方式有问题吧?

谢谢你的帮助。

谢谢。

你的问题可以这样解决:

 val inputRDD=sc.textFile("inputFile.txt")  
inputRDD.flatMap{a=>
          val list=a.split("--")
          val firstTerm=list(0)
          val secondTermAsList=list(1).split(",")
          secondTermAsList.map{b=>
          val key=if(b>firstTerm) (firstTerm,b) else (b,firstTerm)
          val value=secondTermAsList diff List(b)
          (key,value)
          }
          }

这段代码的输出结果如下:

+-----+------+
|_1   |_2    |
+-----+------+
|[0,1]|[2, 4]|
|[0,2]|[1, 4]|
|[0,4]|[1, 2]|
|[0,1]|[4]   |
|[1,4]|[0]   |
|[0,2]|[4]   |
|[2,4]|[0]   |
|[2,4]|[1, 0]|
|[1,4]|[2, 0]|
|[0,4]|[2, 1]|
+-----+------+

希望这能解决你的问题!

最新更新