我在理解Graphframe上的BFS时遇到了一些问题。我正在试图找到“所有的父亲”--在图表中没有父母的那个人。
看,我有这个数据帧:
val df = sqlContext.createDataFrame(List(
("153030152492012801800", ""),
("153030152492012801845", ""),
("153030152492013801220","153030152492012801845"),
("153030152492013800151","153030152492012801845"),
("153030152492014800546","153030152492012801845"),
("153030152492013800497", "153030152492013800151"),
("153030152492013801860", "153030152492013800151"),
("153030152492014800038", "153030152492013801860"),
("153030152492014801015", "153030152492014800038"),
("153030152492014801235", "153030152492014801015")
)).toDF("id", "parent")我将我的Graph构建为:
val df_vertices = df.selectExpr("id", "parent")
val df_edges = df.withColumnRenamed("id", "src").withColumnRenamed("parent", "dst").withColumn("relation", lit("parent"))
val g = GraphFrame(df_vertices, df_edges)最后,我以如下方式运行BFS:
g.bfs.fromExpr("id = 153030152492013800151").toExpr("parent = ''").run().show(false)但我得到的是:
+----------------------------------------------+------------------------------------------------------+-------------------------+
|from |e0 |to |
+----------------------------------------------+------------------------------------------------------+-------------------------+
|[153030152492013801220, 153030152492012801845]|[153030152492013801220, 153030152492012801845, parent]|[153030152492012801845, ]|
|[153030152492013800151, 153030152492012801845]|[153030152492013800151, 153030152492012801845, parent]|[153030152492012801845, ]|
+----------------------------------------------+------------------------------------------------------+-------------------------+问题是,为什么我会得到第一行,以"153030152492013801220“开头的行?看,这个值不在路径"153030152492013800151“中。那么,为什么会有这样的结果呢?
谢谢大家!
发布于 2021-07-15 07:22:22
我找出了我的错误。问题是"ID“是一个字符串,所以我不得不这样调用BFS:
g.bfs.fromExpr("id = '153030152492013800151'").toExpr("parent = ''").run().show(false)我张贴了答案,因为graphframe没有显示任何错误。只是想提醒你一下。
https://stackoverflow.com/questions/68355089
复制相似问题