如何编写一个转换函数来参考 Graphframe 对象转换 RDD?
How to write a transformation function to transform RDD with reference to a Graphframe object?
我有一个 Graphframe 对象:g 和一个 RDD 对象:candidate:
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 中计算从 "source" 到 "target" 的路径,并生成一个带有键值对 ((source, target), path_list) 使用 graphframe 的广度优先搜索,其中 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
我试过将图表制作成全局图或广播它,但都不起作用。
谁能帮我解决这个问题?
非常感谢!!
TL;DR 不可能。
Spark 不支持这样的嵌套操作。外循环必须是非分布式的:
>>> [g.bfs(arg1, arg2) for arg1, arg2 in candidates_rdd.collect()]
我有一个 Graphframe 对象:g 和一个 RDD 对象:candidate:
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 中计算从 "source" 到 "target" 的路径,并生成一个带有键值对 ((source, target), path_list) 使用 graphframe 的广度优先搜索,其中 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
我试过将图表制作成全局图或广播它,但都不起作用。
谁能帮我解决这个问题?
非常感谢!!
TL;DR 不可能。
Spark 不支持这样的嵌套操作。外循环必须是非分布式的:
>>> [g.bfs(arg1, arg2) for arg1, arg2 in candidates_rdd.collect()]