Scala比较2个Spark数据帧中的值

时间:2018-07-13 11:41:35

标签: scala apache-spark

我正在尝试编写条件语句以在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错误。如何执行此操作?谢谢!!

1 个答案:

答案 0 :(得分:1)

您正在获取布尔错误,因为条件期望条件返回布尔值,但是spark中的运算符===返回ouput列。因为您正在得到该错误。

下面,我正在共享指向您看到的spark文档的链接。

https://spark.apache.org/docs/2.0.0/api/java/org/apache/spark/sql/Column.html#equals(java.lang.Object)

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)

因此删除===并替换为==即可