spark Sql选择列和选择行的函数

在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一样。

你可能感兴趣的:(spark,scala)