【发布时间】:2017-08-05 00:38:46
【问题描述】:
我想从边数据集中获取所有链接,其源包含在所有现有节点的数据集中。
边缘列:| dst |源代码 |类型 | (所有字符串)
节点列:|编号 |页码 | (所有字符串)
我通过从数据集中检索一个列表并使用 contains() 方法来做到这一点。
List<String> allNodeList = allNodes.javaRDD().map(r -> r.getString(0)).collect();
Dataset<Row> allLinks = dfEdges.filter("type = 'link'").filter(r -> allNodeList.contains(r.getString(1)));
但现在我想消除那段额外的代码并使用更原生的方式。我的方法是使用计数,但由于 NotSerializableException,这似乎不起作用。
Dataset<Row> allLinks = dfEdges.filter("type = 'link'").filter(r -> (dfNodes.filter("id="+r.getString(1)).count()>0));
在java中有什么简单的方法可以解决这个问题吗?我在 scala 中看到过“is in”或类似的东西,但不知道如何在 java 中简单地解决它。
【问题讨论】:
标签: java apache-spark spark-dataframe apache-spark-dataset