tob*_*as. 3 java apache-spark spark-dataframe apache-spark-dataset
我想从边的数据集中获取所有链接,边的数据源包含在所有现有节点的数据集中。
边栏:dst | src | 类型 (所有字符串)
节点列:id | pageid | (所有字符串)
我这样做是通过从数据集中检索列表并使用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)));
Run Code Online (Sandbox Code Playgroud)
但是,现在我想消除那段额外的代码,并使用一种更原生的方式。我的方法是使用count,但是由于NotSerializableException,这似乎不起作用。
Dataset<Row> allLinks = dfEdges.filter("type = 'link'").filter(r -> (dfNodes.filter("id="+r.getString(1)).count()>0));
Run Code Online (Sandbox Code Playgroud)
有没有简单的方法可以解决Java中的问题?我已经在scala中看到了“存在于”或类似内容,但不知道如何在Java中简单地解决它。
是的,有一种简单的方法可以解决java中的问题。但只能通过join。像这样:
Dataset<Row> allLinks = dfEdges.filter("type = 'link'")
.join(dfNodes, dfEdges.col("src")
.equalTo(dfNodes.col("id")))
.drop("dst", "src", "type");
Run Code Online (Sandbox Code Playgroud)
它会给您想要的结果。
希望对您有所帮助!
| 归档时间: |
|
| 查看次数: |
5812 次 |
| 最近记录: |