gpt4 book ai didi

scala - 处理一行后的 Spark - Scala : Return multiple

转载 作者:行者123 更新时间:2023-12-01 10:32:59 24 4
gpt4 key购买 nike

我有一个如下所示的数据集 -

0 -- 1,2,4
1 -- 0,4
2 -- 0,4
4 -- 2,1,0

我想读取每一行并将其转换为如下所示的内容

//对于第 0 -- 1,2,4 行
(0,1) <2,4>
(0,2) <1,4>
(0,4) <1,2>

//对于第 1 行 -- 0,4
(0,1) <4>
(1,4) <0>

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

即读取以“--”分隔符分隔的每一行。所以我从数据集的第 1 行得到 0 和 1,2,4。之后,我想创建对。例如,(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。我假设我创建 map 的方式存在一些问题?

感谢任何帮助。

谢谢。

最佳答案

你的问题可以这样解决:

 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]|
+-----+------+

希望这能解决您的问题!

关于scala - 处理一行后的 Spark - Scala : Return multiple <key, 值>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40192605/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com