Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/383.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spark数据集:如果值包含在其他数据集中,则进行筛选_Java_Apache Spark_Spark Dataframe_Apache Spark Dataset - Fatal编程技术网

Java Spark数据集:如果值包含在其他数据集中,则进行筛选

Java Spark数据集:如果值包含在其他数据集中,则进行筛选,java,apache-spark,spark-dataframe,apache-spark-dataset,Java,Apache Spark,Spark Dataframe,Apache Spark Dataset,我想从边数据集中获取所有链接,其源包含在所有现有节点的数据集中 边柱:| dst | src |类型|(所有字符串) 节点列:| id | pageid |(所有字符串) 我通过从数据集中检索一个列表并使用contains()方法实现了这一点 List allNodeList=allNodes.javaRDD().map(r->r.getString(0)).collect(); Dataset allLinks=dfEdges.filter(“type='link')).filter(r->a

我想从边数据集中获取所有链接,其源包含在所有现有节点的数据集中

边柱:| dst | src |类型|(所有字符串)

节点列:| id | pageid |(所有字符串)

我通过从数据集中检索一个列表并使用contains()方法实现了这一点

List allNodeList=allNodes.javaRDD().map(r->r.getString(0)).collect();
Dataset allLinks=dfEdges.filter(“type='link')).filter(r->allNodeList.contains(r.getString(1));
但现在我想消除这段额外的代码,并使用一种更自然的方式。我的方法是使用count,但由于NotSerializableException,这似乎不起作用

Dataset<Row> allLinks = dfEdges.filter("type = 'link'").filter(r -> (dfNodes.filter("id="+r.getString(1)).count()>0));
Dataset allLinks=dfEdges.filter(“类型='link')).filter(r->(dfNodes.filter(“id=“+r.getString(1)).count()>0));

在java中有没有简单的方法来解决这个问题?我在scala中见过“is in”或类似的东西,但不知道如何用java简单地解决它。

是的,有一种简单的方法可以用java解决这个问题。但只能通过
加入
。像这样:

Dataset<Row> allLinks = dfEdges.filter("type = 'link'")
                               .join(dfNodes, dfEdges.col("src")
                               .equalTo(dfNodes.col("id")))
                               .drop("dst", "src", "type");
Dataset allLinks=dfEdges.filter(“类型='link'))
.join(dfNodes、dfEdges.col(“src”)
.equalTo(dfNodes.col(“id”))
.drop(“dst”、“src”、“类型”);
它会给你想要的结果


我希望有帮助

真的,谢谢你!考虑过使用
join
,但没有真正理解。但现在我可以从你的方法中得出进一步的解决方案。
Dataset<Row> allLinks = dfEdges.filter("type = 'link'")
                               .join(dfNodes, dfEdges.col("src")
                               .equalTo(dfNodes.col("id")))
                               .drop("dst", "src", "type");