我的图表有另一个问题。我的边包含三个属性作为元组,因此边缘看起来像(verticeId_1, verticeId_2,(Attr1,Attr2,Attr3))
。
我正在尝试创建一个仅包含边的图形,其中Attr2> 100(Attr2是一个数字)。所以我试试这个: val gr2=graph.subgraph(epred=(id1: String,id2: String, attr: Tuple) => attr(2)>100)
但是变成了错误元组不能在方法或函数参数中直接解构。这个问题有一些解决方法吗?
提前谢谢。
更新。边缘定义为
val ed = df.rdd.map(x =>((MurmurHash.stringHash(x(3).toString),MurmurHash.stringHash(x(4).toString)), (x(0),x(1),x(2)))).map(x => Edge(x._1._1, x._1._2,x._2))
来自dataframe df,其中包含属性为列0,1,2,顶点为第3列和第4列。
答案 0 :(得分:2)
子图函数可以采用顶点和边缘谓词。对于边缘谓词,它需要一个带有EdgeTriplet对象并输出布尔值的函数。 EdgeTriple对象具有一些属性,使您可以访问有关顶点和您创建的链接的属性的信息。要实现您的案例,请尝试以下方法:
ui->setupUi(this);
Filter * filter = new Filter();
ui->label->installEventFilter(filter);
/* don't forget to call:
delete filter;
somewhere later */
以下是EdgeTriple的文档,其中显示了您可以使用的属性:
https://spark.apache.org/docs/latest/api/scala/index.html#org.apache.spark.graphx.EdgeTriplet
另外,请注意您的边缘属性是一个元组,因此必须使用" _1"," _2"等成员访问它们,而不是使用括号进行数组索引。
编辑:作为参考,这是一个完整的自包含示例:
g2 = graph.subgraph( epred=(triplet) => triplet.attr._3 > 100)