使用Spark 2.2(scala)中的&&运算符时,具有多列的DataFrame过滤器不起作用

时间:2019-10-29 16:19:40

标签: apache-spark apache-spark-sql

我在spark 2.2中使用一个数据框并在那里加载数据。我在使用多个列的Filter函数中使用&&运算符。该错误表示错误:value &&不是String的成员

这是我的代码。

scala> val orders = spark.sparkContext.textFile("D:\\SparkExamples\\retail_db\\orders\\part-00000")                                                            

scala> import java.sql.Timestamp

scala> val ordersMap = orders.map(x => (x.split(",")(0).toInt,Timestamp.valueOf(x.split(",")(1)),x.split(",")(2).toInt,x.split(",")(3)))

scala> val ordersSchema = ordersMap.toDF("order_id","order_date","order_customer_id","order_status")

以下过滤器正常工作-

ordersSchema.select($"*").filter($"order_status"=== "COMPLETE").show

但是当我将两列与&&放在过滤器中时,如下所示-

scala> ordersSchema.select($"*").filter($"order_status"!== "COMPLETE" && $"order_date" === "2013-07-25 00:00:00").show
<console>:34: error: value && is not a member of String
       ordersSchema.select($"*").filter($"order_status"!== "COMPLETE" && $"order_date" === "2013-07-25 00:00:00").show

错误即将出现。有指针吗?

1 个答案:

答案 0 :(得分:1)

&&不是火花Columns的有效逻辑运算符,请改用and

ordersSchema.select($"*").filter($"order_status" =!= "COMPLETE" and $"order_date" === "2013-07-25 00:00:00").show