如何在没有SQL查询的情况下使用Spark Dataframe检查是否相等?

Ins*_*nct 37 scala dataframe apache-spark apache-spark-sql

我想选择一个等于某个值的列.我在scala中做这个并且有点麻烦.

继承我的代码

df.select(df("state")==="TX").show()
Run Code Online (Sandbox Code Playgroud)

这将返回状态列,其中包含布尔值而不仅仅是TX

我也试过了

df.select(df("state")=="TX").show() 
Run Code Online (Sandbox Code Playgroud)

但这也不起作用.

小智 61

我遇到了同样的问题,以下语法对我有用:

df.filter(df("state")==="TX").show()
Run Code Online (Sandbox Code Playgroud)

我正在使用Spark 1.6.

  • 这在1.6中对我不起作用.我必须使用括号来对数据帧进行子集化,例如`df.filter(df ["state"] =="TX").show()` (4认同)
  • 带括号的语法是PySpark.带括号的那个是Scala (2认同)

Jeg*_*gan 21

还有另一个简单的sql选项.使用Spark 1.6下面也应该可以工作.

df.filter("state = 'TX'")
Run Code Online (Sandbox Code Playgroud)

这是一种指定类似过滤器的sql的新方法.有关支持的运算符的完整列表,请查看此类.


Jus*_*ony 14

您应该使用where,select是一个返回语句输出的投影,因此您获得布尔值的原因.where是一个保留数据帧结构的过滤器,但只保留过滤器工作的数据.

但是,根据文档,您可以用3种不同的方式编写它

// The following are equivalent:
peopleDf.filter($"age" > 15)
peopleDf.where($"age" > 15)
peopleDf($"age" > 15)
Run Code Online (Sandbox Code Playgroud)

  • `df.filter($"state"==="TX")`应该有效.你需要在这里使用三等于,它返回一个列 - > https://spark.apache.org/docs/1.3.0/api/scala/index.html#org.apache.spark.sql.Column (10认同)

小智 9

为了得到否定,这样做......

df.filter(not( ..expression.. ))
Run Code Online (Sandbox Code Playgroud)

例如

df.filter(not($"state" === "TX"))
Run Code Online (Sandbox Code Playgroud)

  • 或者你也可以不等于`df.filter($"state"!=="TX")` (2认同)

Sri*_*ini 8

df.filter($"state" like "T%%") 用于模式匹配

df.filter($"state" === "TX")df.filter("state = 'TX'")平等


小智 5

我们可以在 Dataframe 中编写多个 Filter/where 条件。

例如:

table1_df
.filter($"Col_1_name" === "buddy")  // check for equal to string
.filter($"Col_2_name" === "A")
.filter(not($"Col_2_name".contains(" .sql")))  // filter a string which is    not relevent
.filter("Col_2_name is not null")   // no null filter
.take(5).foreach(println)
Run Code Online (Sandbox Code Playgroud)


小智 5

在 Spark V2.* 上工作

import sqlContext.implicits._
df.filter($"state" === "TX")
Run Code Online (Sandbox Code Playgroud)

如果需要与变量(例如,var)进行比较:

import sqlContext.implicits._
df.filter($"state" === var)
Run Code Online (Sandbox Code Playgroud)

笔记 : import sqlContext.implicits._