gpt4 book ai didi

scala - 动态连接多个列上的两个 spark-scala 数据帧,无需硬编码连接条件

转载 作者:行者123 更新时间:2023-12-04 05:47:58 27 4
gpt4 key购买 nike

我想在多个列上动态加入两个 spark-scala 数据帧。我会避免硬编码列名称比较,如以下语句所示;

val joinRes = df1.join(df2, df1("col1") == df2("col1") and df1("col2") == df2("col2"))

此查询的解决方案已存在于 pyspark 版本中 -- 在以下链接中提供 PySpark DataFrame - Join on multiple columns dynamically

我想使用 spark-scala 编写相同的代码

最佳答案

在 scala 中,你可以像在 python 中那样做,但你需要使用 map 和 reduce 函数:

val sparkSession = SparkSession.builder().getOrCreate()
import sparkSession.implicits._

val df1 = List("a,b", "b,c", "c,d").toDF("col1","col2")
val df2 = List("1,2", "2,c", "3,4").toDF("col1","col2")

val columnsdf1 = df1.columns
val columnsdf2 = df2.columns

val joinExprs = columnsdf1
.zip(columnsdf2)
.map{case (c1, c2) => df1(c1) === df2(c2)}
.reduce(_ && _)

val dfJoinRes = df1.join(df2,joinExprs)

关于scala - 动态连接多个列上的两个 spark-scala 数据帧,无需硬编码连接条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43297862/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com