【发布时间】:2017-07-25 19:41:46
【问题描述】:
这就是我想要做的,我有两个表具有完全相同的列名。
表格看起来有点像这样:
-----------
A B C D
-----------
1 2 3 4
5 6 3 4
7 8 3 4
我需要解决的问题的逻辑是,将 Table1 中的 A B C D 列与 Table2 进行比较。如果A,B相互匹配,则返回一个值为0的新列,否则返回0。如果表A中的C为3,则返回0,否则返回1。每行只应返回一个值,优先级:C>D >A=B。
我加入了两个表(dataFrames),结果是一个combinedDf。这就是我加入他们的方式:Table1.join(Table2,table1($"A")=table2($"A"))
这就是我所做的:
def func(A:mutable.WrappedArray[String],B:mutable.WrappedArray[String],C:String,D:String) =
{if(C=="3") "0";
else if(D=="4")"1";
else if ((0 to A.length-1).exists(i => A(i) == B(i)))"0" else "1"}
对于这个函数,我想将 Table1 中的 A、B 列放入一个数组中,将 Table2 中的 A、B 列放入另一个数组中,并运行一个 for 循环来检查相等性。 (我需要数组,因为对于实际情况,我需要比较随机数量的列)。
这是我调用函数的方式。
combinedDf.withColumn("returnVal",func(array(col("table1.A"),col("table1.B")),
array(col("table2.A"),col("table2.B")),col("table1.C"),col("table1.D")))
但它只是不起作用,即使我使用数组函数将列放在数组中,它仍然告诉我类型不匹配。
错误信息:<console:67>: error: type mismatch; found:org.apache.spark.Column required: String
提前致谢!
【问题讨论】:
-
能否请您发送错误消息的第一部分?
-
你是如何加入这两个数据框的?请也更新该部分。
-
@Ramesh Maharjan 已更新
-
加入是否有效?我想这不是因为您的 join 语句完全错误。
-
根据连接看来,两个数据框的 A 列都匹配用于连接目的。这是真的吗?
标签: scala apache-spark