scala - 如何在Scala(Spark)中比较两个数据框中的列

标签 scala apache-spark hadoop apache-spark-sql

我们正在将数据从table1移到table2。如果table1中存在table2中的数据,则需要创建对帐报告。

例:

val df1 = """(select col1, col2, col3, col4 from table1)""" 
val df2 = """(select col21,col22,col23,c24 from table2)"""

现在,我需要检查table1中的数据是否存在于table2中,如果丢失,则将其写入报告。

最佳答案

左反连接是比较两个数据框的一列或多列来过滤数据框1中存在但数据框2中不存在的行的一种优雅方法。
由于您对left anti join解决方案不满意,因此让我们继续尝试另一种方法。

假设我们有两个具有共同列名的数据框:

val DF1 = Seq(
  ("Ravi", 20),
  ("Kiran", 25),
  ("Gaurav", 30),
  ("Vinay", 35),
  ("Mahesh", 40)
).toDF("name", "age")
val DF2 = Seq(
  ("Ravi", 20),
  ("Mahesh", 40)
).toDF("name", "age")
DF1.except(DF2).show()

output screenshot

还要使用Tzach Zohar检查left-anti-join-in-spark提供的漂亮解决方案

关于scala - 如何在Scala(Spark)中比较两个数据框中的列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60116514/

相关文章:

java - 在主节点上触发Emr并提交作业(jar):

hadoop:在伪分布式环境下有多个reducer?

java - hadoop wordcount 与 java

scala - 警告 :Multiple versions of scala libraries detected?

scala - 为什么sbt找不到KafkaUtils?

scala - 收集范围内的所有标识符

scala - 列表值的函数计算

hadoop - HDFS的位置感知

scala - 隐式Mapper对隐式Mapped参数的奇怪影响

scala - 在 Scala 中,为什么我不能实现这样一个简单的泛型函数?