Spark Scala:在 DataFrame 中替换过滤器表达式的问题

Spark Scala: Issue Substituting Filter Expression In DataFrame

我创建了一个数据框,其中包含 2 tables 的连接。

我想将 table1 的每个字段与 table2 的每个字段进行比较(架构相同) Table 中的列 A = colA1, colB1, colC1 , ... Table B 中的列 = colA2、colB2、colC2、... 所以,我需要过滤掉满足条件

的数据

(colA1 = colA2) AND (colB1 = colB2) AND (colC1 = colC2) 等等。 由于我的table有很多字段,我尝试构建一个类似的exp。

 val filterCols = Seq("colA","colB","colC")
 val sq = '"'
 val exp = filterCols.map({ x => s"(join_df1($sq${x}1$sq) === join_df1($sq${x}2$sq))" }).mkString(" && ")
 Resultant Exp : res28: String = (join_df1("colA1") === join_df1("colA2")) && (join_df1("colB1") === join_df1("colB2")) && (join_df1("colC1") === join_df1("colC2"))

现在,当我尝试将其替换为数据框时,它抛出了一个错误。 join_df1.filter($exp)

我不确定我做的是否正确。我需要找到一种方法来替换我的表达式并过滤掉值。 任何帮助表示赞赏。

提前致谢

这是无效的SQL。尝试:

val df = Seq(
  ("a", "a", "b", "b", "c", "c"),
  ("a", "A", "b", "B", "c", "C")).toDF("a1", "a2", "b1", "b2", "c1", "c2")

val filterCols = Seq("A", "B", "C")

val exp = filterCols.map(x => s"${x}1 = ${x}2").mkString(" AND ")
df.where(exp)