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
Scala 在两个数据帧中查找公共行,并在第一个数据帧中标记公共行_Scala_Apache Spark_Apache Spark Sql - Fatal编程技术网

Scala 在两个数据帧中查找公共行,并在第一个数据帧中标记公共行

Scala 在两个数据帧中查找公共行,并在第一个数据帧中标记公共行,scala,apache-spark,apache-spark-sql,Scala,Apache Spark,Apache Spark Sql,我正在使用Scala进行Spark上的链接预测项目。我的目标是找到两个数据帧之间的公共行(其中一个包含所有链接的基本事实),并在第一个数据帧中标记它们。因此,标记行将表示现有行。 例如,我有以下数据帧: +---+---+ +---+---+ |id1|id2| |id1|id2| +---+---+ +---+---+ | 2 | 3 | | 4 | 1 | | 1 | 4 | | 2 | 3 | +---+---+ +---+---+ 我希望结果是: +---+-

我正在使用Scala进行Spark上的链接预测项目。我的目标是找到两个数据帧之间的公共行(其中一个包含所有链接的基本事实),并在第一个数据帧中标记它们。因此,标记行将表示现有行。 例如,我有以下数据帧:

+---+---+  +---+---+ 
|id1|id2|  |id1|id2|  
+---+---+  +---+---+  
| 2 | 3 |  | 4 | 1 | 
| 1 | 4 |  | 2 | 3 | 
+---+---+  +---+---+
我希望结果是:

+---+---+-----+
|id1|id2|label|
+---+---+-----+
| 2 | 3 |  1  |
| 1 | 4 |  0  |
+---+---+-----+ 

其中1表示链接存在于第二个数据帧中,而0表示相反。链接是定向的。

您可以通过以下方式在两个数据帧之间进行左连接:

import org.apache.spark.sql.functions.when
import spark.implicits._
val df1 = sc.parallelize(Seq((2,3),(1,4))).toDF("id1","id2")
val df2 = sc.parallelize(Seq((4,1),(2,3))).toDF("id1","id2")
val df3 = df1.join(df2, df1("id1")===df2("id1") && df1("id2") === df2("id2"), "left")
    .select(df1("id1"),
      df1("id2"),
      when(df2("id1").isNull, 0).otherwise(1).alias("label"))
df3.show()
+---+---+-----+
|id1|id2|label|
+---+---+-----+
|  2|  3|    1|
|  1|  4|    0|
+---+---+-----+

希望它能对您有所帮助。

Hi@Valentina,欢迎来到StackOverflow,您可以查看以改进此问题和未来的问题。特别是你应该提供一些和/或一些代码,以证明你已经尝试自己解决问题。是的,这正是我所需要的。非常感谢你!