2
すべてのリンクを、すべての既存ノードのデータセットに含まれるエッジのデータセットから取得したいとします。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)));
しかし、私はこのコードを削除してより自然な方法で使いたいと思っています。私のアプローチは、カウントを使用することでしたが、NotSerializableExceptionのために動作しないようです。
Dataset<Row> allLinks = dfEdges.filter("type = 'link'").filter(r -> (dfNodes.filter("id="+r.getString(1)).count()>0));
Javaでこの問題を解決する簡単な方法はありますか?私はスカラーで物事を "見ている"かそれと同様に見ましたが、単純にそれをJavaでどのように解決するのか分かりません。
実際には、ありがとう! 'join 'の使用については考えましたが、実際には理解できませんでした。しかし、今私はあなたのアプローチからさらなる解決策を引き出すことができます。 –