在spark sql中,行和列是非常重要的,但是sql中的一些函数是非常容易混淆的,比如filter、select、where函数,特此写一篇博客来记录这些区别。
select 函数是从dataframe中取得列,有以下几种格式:
select(cols : Column*) : DataFrame
select(col : String, cols : String*) : DataFrame
select[U1](c1 : TypedColumn[T, U1]) : Dataset[U1]
select[U1, U2](c1 : TypedColumn[T, U1], c2 : TypedColumn[T, U2]) : Dataset[scala.Tuple2[U1, U2]]
// And more select() that takes up to 5 TypesColumns U1,U2,U3,U4,U5
例子
df.select("firstname","lastname").show()
//Using Dataframe object name
df.select(df("firstname"),df("lastname")).show()
//Using col function, use alias() to get alias name
import org.apache.spark.sql.functions.col
df.select(col("firstname").alias("fname"),col("lastname")).show()
输出就是
+---------+--------+
|firstname|lastname|
+---------+--------+
| James| Smith|
| Michael| Rose|
| Robert|Williams|
| Maria| Jones|
+---------+--------+
filter函数和where函数都是从dataframe中选择各种row,where和filter的用法都是一样的
下面是filter的多种形式
1) filter(condition: Column): Dataset[T] //选择单一条件
2) filter(conditionExpr: String): Dataset[T] //sql语法使用
3) filter(func: T => Boolean): Dataset[T]
4) filter(func: FilterFunction[T]): Dataset[T]
第一种形式:
df.filter(df("state") === "OH").show(false
第二种形式:
df.filter("gender == 'M'").show(false)
df.where("gender == 'M'").show(false)
以上就是spark sql选择列和选择行的函数,可以看出spark sql的很多语句都是可以使用表达式的,跟sql一样。