apache-spark - Spark Dataframes AND/OR 在同一个单元格中
问题描述
我有两个 Spark DataFrame,如下所示:
DF1
join_key d1 d2 d3
a 1 1 1
b 0 1 0
DF2
join_key d1 d2 d3
a 1 0 0
b 0 1 0
d1,d2,d3 中的所有值都是 1 或 0,并且两个 DataFrame 具有相同的列和 join_key 值。除了join_key,我想在每个单元格中生成类似“AND”的结果,如下所示:
结果 = DF1 & DF2(在 d1,d2,d3 中的每个单元格中执行 AND 操作)
join_key d1 d2 d3
a 1 0 0
b 0 1 0
我想知道这有可能在 Spark DataFrame 中实现吗?如何生成,非常感谢。
解决方案
看起来您需要 use union
,而不是join
,因为您在两个数据框中都有完全相同的架构。如果是这样,您可以简单地使用min
聚合函数。如果您有多个列,则可以对其进行迭代并生成相同的转换,这是一个示例:
val commonColumns = (df1.columns.toSet & df2.columns.toSet).filter(_ != "join_key").toSeq
commonColumns
df1.union(df2)
.groupBy("join_key")
.agg(count(lit(1)) as "cnt",
commonColumns.map(c => when(min(col(c)) > 0, 1).otherwise(0) as c):_*)
.select("join_key", commonColumns:_*)
.show
输出是:
+--------+---+---+---+
|join_key| d1| d2| d3|
+--------+---+---+---+
| b| 0| 1| 0|
| a| 1| 0| 0|
+--------+---+---+---+
推荐阅读
- python - 赋值前引用的变量,但我之前赋值过
- javascript - 为什么我的 HTML5 画布边缘的线条变得不那么不透明?
- python - 如何连接熊猫数据框中的三列,并用下划线`_`连接?
- python - 如何将单个多项式曲线拟合到散点图
- html - 在 HTML/CSS 中用矩形动态覆盖图像
- java - java.net.CookieManager put SEVERE: Invalid cookie for [URL]
- scala - 抽象类与方法之间的Scala差异
- python - 如何根据条件将数据框值附加到空列表
- python - Python输入验证函数保留旧变量
- mysql - 无法将 mariadb 服务器连接到 mysql 工作台