Apache spark 火花数据帧和/或在同一单元格中
我有两个Spark数据框,如下所示: DF1 DF2 d1、d2、d3中的所有值都是1或0,并且两个数据帧具有相同的列和join_键值。除了join_key之外,我想在每个单元格中生成类似“AND”的结果,如下所示: 结果=DF1和DF2(d1、d2、d3中每个单元格中的do和操作)Apache spark 火花数据帧和/或在同一单元格中,apache-spark,apache-spark-sql,Apache Spark,Apache Spark Sql,我有两个Spark数据框,如下所示: DF1 DF2 d1、d2、d3中的所有值都是1或0,并且两个数据帧具有相同的列和join_键值。除了join_key之外,我想在每个单元格中生成类似“AND”的结果,如下所示: 结果=DF1和DF2(d1、d2、d3中每个单元格中的do和操作) 我想知道在Spark DataFrame中是否有可能实现这一点?如何生成,非常感谢。看起来您需要使用union,而不是join,因为两个数据帧中的模式完全相同。如果是这样,您可以简单地使用min聚合函数。如果您有多
我想知道在Spark DataFrame中是否有可能实现这一点?如何生成,非常感谢。看起来您需要使用
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|
+--------+---+---+---+
join_key d1 d2 d3
a 1 0 0
b 0 1 0
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|
+--------+---+---+---+