2016-07-04 30 views
1

我有一个Graphframe对象:g和a RDD对象:候选:如何编写一个转换函数来转换参照Graphframe对象的RDD?

g = GraphFrame(v,e) 
candidates_rdd.collect() 
# [Row(source=u'a', target=u'b'), 
# Row(source=u'a', target=u'c'), 
# Row(source=u'e', target=u'a')] 

欲计算路径从“源”在candidates_rdd“靶”,并且产生与键,值对RDD结果( (source,target),path_list),其中path_list是从源到目标的路径列表。

示例输出:

(('a','b'),['a-c-b','a-d-e-b']), 
(('f','c'),[]), 
(('a',d'),['a-b-e-d'] 

我写了下面的功能:

def bfs_(row):  
    arg1 = "id = '" + row.source + "'" 
    arg2 = "id = '" + row.target + "'"   
    return ((row.source, row.target), g.bfs(arg1,arg2).rdd) 

results = candidates_rdd.map(bfs_) 

我得到这个错误:

Py4JError: An error occurred while calling o274.__getnewargs__. Trace: 
py4j.Py4JException: Method __getnewargs__([]) does not exist 

我试图让图形全球或广播它,都不起作用。

任何人都可以帮助我吗?

非常感谢!

回答

1

TL; DR这是不可能的。

Spark不支持这样的嵌套操作。外环必须不分布:

>>> [g.bfs(arg1, arg2) for arg1, arg2 in candidates_rdd.collect()] 
相关问题