基于连接火花创建新的二进制列
Posted
技术标签:
【中文标题】基于连接火花创建新的二进制列【英文标题】:Create new binary column based off of join in spark 【发布时间】:2018-02-27 00:02:06 【问题描述】:我的情况是我有两个 spark 数据框,dfPopulation
和 dfSubpopulation
。
dfSubpopulation
就是这样,dfPopulation
的子群。
我想要一种干净的方法来在dfPopulation
中创建一个新列,该列是dfSubpopulation
键是否在dfPopulation
键中的二进制。例如。我想要的是创建新的 DataFrame 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 构造,我想利用它。
【问题讨论】:
DataFrames 支持连接。有一些例子in the documentation。请记住,DataFrame
现在是 Dataset[Row]
的别名。
SparkSQL 编译为与数据集操作完全相同的执行计划...
【参考方案1】:
使用 SparkSQL 与 DataFrame 操作相比,从性能角度来看应该没有区别,执行计划是相同的。也就是说,这是使用 join
val dfPopulationNew = dfPopulation.join(
dfSubpopulation.withColumn("inSubpopulation", lit(1)),
Seq("X", "Y", "key"),
"left_outer")
.na.fill(0, Seq("inSubpopulation"))
【讨论】:
我猜左连接应该足够了:) @RameshMaharjan:我相信 left_oter 应该和 left here 一样。如果我错了,请纠正我:)以上是关于基于连接火花创建新的二进制列的主要内容,如果未能解决你的问题,请参考以下文章
如何基于 data.table 中的分类变量以编程方式创建二进制列?
请教SQL的一个问题~,如何在update时向某个列的值追加字符?