Spark 中的数据框比较:Scala
Posted
技术标签:
【中文标题】Spark 中的数据框比较:Scala【英文标题】:Dataframe Comparision in Spark: Scala 【发布时间】:2020-05-14 08:15:38 【问题描述】:我在 spark/scala 中有两个数据框,其中有一些常见的列,例如薪水、奖金、增量等。 我需要比较这两个数据帧的列和任何变化,比如第一个数据帧的薪水是 3000,第二个数据帧的薪水是 5000,然后我需要在新数据帧中插入 5000-3000=2000 作为薪水,如果在第一个数据帧薪水是 5000 和在第二个数据框中薪水为 3000,然后我需要在新数据框中插入 5000+3000=8000 作为薪水,如果两个数据框中的薪水相同,则需要从第二个数据框中插入。
val columns = df1.schema.fields.map(_.salary)
val salaryDifferences = columns.map(col => df1.select(col).except(df2.select(col)))
salaryDifferences.map(diff => if(diff.count > 0) diff.show)
我尝试了上面的查询,但它给出的列和值在哪里有任何差异,我还需要检查差异是负数还是正数,并且基于此我需要执行逻辑。谁能给我一个提示,我该如何实现这并在第三个数据帧中插入记录,
【问题讨论】:
【参考方案1】:加入数据框并使用嵌套的when
和otherwise
子句。
代码中也可以找到cmets
import org.apache.spark.sql.functions._
object SalaryDiff
def main(args: Array[String]): Unit =
val spark = Constant.getSparkSess
import spark.implicits._
val df1 = List(("1", "5000"), ("2", "3000"), ("3", "5000")).toDF("id", "salary") // First dataframe
val df2 = List(("1", "3000"), ("2", "5000"), ("3", "5000")).toDF("id", "salary") // Second dataframe
val df3 = df1 // Is your 3rd tables
.join(
df2
, df1("id") === df2("id") // Join both dataframes on id column
).withColumn("finalSalary", when(df1("salary") < df2("salary"), df2("salary") - df1("salary")) // 5000-3000=2000 check
.otherwise(
when(df1("salary") > df2("salary"), df1("salary") + df2("salary")) // 5000+3000=8000 check
.otherwise(df2("salary")))) // insert from second dataframe
.drop(df1("salary"))
.drop(df2("salary"))
.withColumnRenamed("finalSalary","salary")
.show()
【讨论】:
所有这些值我需要插入到我的第三个表中。它会插入到我的第三个表中吗? df3 是你的第三张桌子@UpAp @UpAp 这回答了你的问题吗?如果是,请考虑投票+接受答案以结束问题 完成。非常感谢,是的,它对我有用。@ QuickSilver。我还面临一个问题,但与此无关,因此在此处发布了一个新问题。***.com/questions/61819955/…。如果您对此有任何想法,请提供帮助。以上是关于Spark 中的数据框比较:Scala的主要内容,如果未能解决你的问题,请参考以下文章
NotNull 条件不适用于 spark 数据框 scala 中的 withColumn 条件
如何访问存储在scala spark中的数据框中的映射值和键