apache-spark - Spark中的数据框比较:Scala
问题描述
我在 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})
我尝试了上面的查询,但是它给出的列和值在哪里有任何差异,我还需要检查差异是负数还是正数,并且基于此我需要执行逻辑。谁能给我一个提示,我该如何实现这个并插入记录在第三个数据帧中,
解决方案
加入数据框并使用嵌套when
和otherwise
子句。还可以在代码中找到注释
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()
}
}
推荐阅读
- python - 在另一个函数中调用 2 个函数
- python - 如何使用python解析txt格式的html?
- python - 从集合列表中找到一个项目与多少其他(唯一)元素配对,找到最常配对的元素
- python - 数据帧行与其自身的有效组合
- arrays - 错误:[arrayReplace] `arr` 必须是一个数组
- java - Android Image Button to tic tac toe
- python - 搜索和下载包含在 pandas df 链接列中的 pdf 文件
- typescript - 确定 typescript 代码是否在 jasmine/karma 测试中运行的简单方法?
- python - Python根函数的精度
- c++ - 使用erase-remove-idiom从结构的向量中删除结构的元素