我创建了一个数据框,它保存了2个表的连接。
我想比较table1的每个字段和table2的字段(Schema是相同的) 表A中的列= colA1,colB1,colC1,... 表B中的列= colA2,colB2,colC2,... 所以,我需要过滤掉满足条件的数据
(colA1 = colA2)AND(colB1 = colB2)AND(colC1 = colC2)等。 由于我的表有很多字段,我试图建立一个类似的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)
我不确定我是否正确行事。我需要找到一种方法来替换我的表达并过滤掉值。 任何帮助表示赞赏。
答案 0 :(得分:1)
这不是有效的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)