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)
我创建了一个数据框,其中包含 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)