Scala 基于spark中的联接创建新的二进制列
我的情况是我有两个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
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:我认为左连接应该与左连接相同。如果我错了,请纠正我:)