scala - 图框和 BFS
问题描述
我在理解 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")
我将我的图表构建为:
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”的路径中。那么,为什么会出现这个结果?
谢谢你们!
解决方案
我发现了我的错误。问题是“ID”是一个字符串,所以,我不得不将 BFS 称为:
g.bfs.fromExpr("id = '153030152492013800151'").toExpr("parent = ''").run().show(false)
我发布了答案,因为 graphframe 没有显示任何错误。只是为了警告你。
推荐阅读
- python - 删除熊猫中的“相似”行
- python - Pandas - 如何根据其他列中的条件对列中的句子求和,并将结果文档存储在列表中
- ios - UITextField 绑定时弹跳的文本正在更改
- reactjs - React 的代码优化(forEach 或简单的 for)
- c++ - stringstream 中的自定义字符串输入
- java - 如何将最大队列大小导出到 Excel?
- python - 在 Keras 中定义新的 Lambda 层时重塑错误
- mongodb - 如何修复 AdapterError:来自数据库适配器的意外错误:对象 [{"_bsontype":"ObjectID","id":null}]
- python - 我想从一个巨大的数字中选择一个随机数
- react-native - 在 StackNavigator RootScreen 中动态包含标题作为组件