Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/6.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 基于spark中的联接创建新的二进制列_Scala_Apache Spark_Join_Apache Spark Sql_Spark Dataframe - Fatal编程技术网

Scala 基于spark中的联接创建新的二进制列

Scala 基于spark中的联接创建新的二进制列,scala,apache-spark,join,apache-spark-sql,spark-dataframe,Scala,Apache Spark,Join,Apache Spark Sql,Spark Dataframe,我的情况是我有两个spark数据帧,dfPopulation和dfSubpopulation dfSubpopulation正是这一点,dfPopulation的一个子群体 我想要一种干净的方法在dfPopulation中创建一个新列,它是dfSubpopulation键是否在dfPopulation键中的二进制。例如,我想要的是创建新的数据帧dfPopulationNew: dfPopulation = X Y key 1 2 A

我的情况是我有两个spark数据帧,
dfPopulation
dfSubpopulation

dfSubpopulation
正是这一点,dfPopulation的一个子群体

我想要一种干净的方法在
dfPopulation
中创建一个新列,它是
dfSubpopulation
键是否在
dfPopulation
键中的二进制。例如,我想要的是创建新的数据帧
dfPopulationNew

dfPopulation =  X  Y  key
                1  2  A
                2  2  A
                3  2  B
                4  2  C
                5  3  C

dfSubpopulation =  X  Y  key
                   1  2  A
                   3  2  B
                   4  2  C


dfPopulationNew =  X  Y  key inSubpopulation
                   1  2  A  1
                   2  2  A  0
                   3  2  B  1
                   4  2  C  1
                   5  3  C  0

我知道这可以简单地用SQL语句来解决,但是考虑到很多Sparks优化现在都在使用DataFrame构造,我想利用它。

使用SparkSQL与DataFrame操作相比,从性能角度看应该没有什么区别,执行计划是相同的。也就是说,这里有一种方法可以使用
join

val dfPopulationNew = dfPopulation.join(
    dfSubpopulation.withColumn("inSubpopulation", lit(1)),
    Seq("X", "Y", "key"), 
    "left_outer")
  .na.fill(0, Seq("inSubpopulation"))

数据帧支持连接。这里有一些例子。请记住,
DataFrame
现在是
Dataset[Row]
的别名。SparkSQL编译为与数据集操作完全相同的执行计划……我想左连接应该足够了:)@RameshMaharjan:我认为左连接应该与左连接相同。如果我错了,请纠正我:)