我正在尝试编写条件语句以在Scala中将2个Spark数据帧连接在一起:
val joinCondition = when($"filteredRESULT.key" == $"allDataUSE.key" && $"allDataUSE.timestamp" >= $"filteredRESULT.tripStart" && $"allDataUSE.timestamp" <= $"filteredRESULT.tripEND", $"allDataUSE.tripid" === $"filteredRESULT.tripid").otherwise($"allDataUSE.tripid" === 0)
filteredRESULT
df非常小,其中包含tripID,tripStart时间,tripEnd时间。我的目标是使用filteredRESULT
作为查找表,其中将allDataUSE
df中的一行与filteredRESULT
中的条目进行比较。例如:
如果在allDataUSE
中,一行与filteredRESULT
键匹配,则时间戳> =行程的开始时间,而<=行程的结束时间,则{{1}中的tripid
列}}应该在allDataUSE
df中接收tripid
的值。
运行上述条件语句时出现filteredRESULT
错误。如何执行此操作?谢谢!!
答案 0 :(得分:1)
您正在获取布尔错误,因为条件期望条件返回布尔值,但是spark中的运算符===返回ouput列。因为您正在得到该错误。
下面,我正在共享指向您看到的spark文档的链接。
public Column equalTo(Object other)
Equality test.
// Scala:
df.filter( df("colA") === df("colB") )
// Java
import static org.apache.spark.sql.functions.*;
df.filter( col("colA").equalTo(col("colB")) );
Parameters:
other - (undocumented)
Returns:
(undocumented)
因此删除===并替换为==即可