【发布时间】:2018-04-17 16:07:13
【问题描述】:
我想基本上加入两个 RDD 的顶点和边。使用以下代码创建顶点和边:
val file = sc.textFile("file.gz") //This tab separated file has more than two columns among which only first two columns with source and destination URL are relevant
val edges= file.flatMap(f => {
val urls = f.split("\t")
if (!(urls.length < 2))
{ Some(urls(0) +"\t"+ urls(1)) }
else None }).distinct
val vertices = edges.flatMap(f => f.split("\t")).distinct
val vertices_zip = vertices.zipWithUniqueId
现在我有一个顶点 (URL) 列表,其中包含使用上述方法生成的 ID,例如:
google.de/2011/10/Extract-host,11
facebook.de/2014/11/photos,28
community.cloudera.com/t5/,42
facebook.de/2020/11/photos,91
我想根据这些 ID 创建边。 Edges RDD 文件是制表符分隔的,如下所示:
google.de/2011/10/Extract-host facebook.de/2014/11/photos
facebook.de/2014/11/photos community.cloudera.com/t5/,42
community.cloudera.com/t5/ google.de/2011/10/Extract-host
要求的结果:
11 28
28 42
42 11
我尝试了以下代码
val edges_id = edges.flatMap( line => line.split( "\t" ) ).map( line => ( line,0) ) .join(vert_zip).map(x=>x._2._2)
但没有得到想要的结果。我得到了
11
28
28
42
42
11
我不确定如何将边与顶点 RDD 连接以获得此结果。任何帮助将不胜感激。
【问题讨论】:
-
Edges RDD are tab separated like below。 RDD 不是制表符分隔的。你的意思是你有制表符分隔的文件吗?你能发布你用来创建vetices rdd和edges rdd的过程/代码吗?我认为一个简单的查找地图可以解决您的问题 -
@RameshMaharjan 我希望现在很清楚
-
我已经在下面回答了:) 请检查
标签: scala apache-spark