本文主要是介绍Spark SQL(二) DataFrames相关的Transformation操作,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
Spark SQL(二) DataFrames相关的Transformation操作
DataFrames是不可变的,且与其相关的Transformation操作和RDD的相关操作一样都是返回一个新的DataFrame.
DataFrames Transformations
- select
- selectExpr
- filter/where
- distinct/dropDuplicates
- sort/orderBy
- limit
- union
- withColumn
- withColumnRenamed
- drop
- sample
- randomSplit
- join
- groupBy
- describe
如何引用列
上面列的转换操作有的需要以字符串的形式传入一个列作为参数,有的需要一个Column
的方式传入一个列作为参数。所以在介绍Transformation相关的操作之前先介绍下Spark SQL种引用列的方式。
在Spark SQL中有5种方式引用一个列:
"columnName"
用双引号括住一个列名,这种方式以字符串的形式引用列。col("clolumnName")
.col
这个函数会返回一个Column
类的实例column("columnName")
. 这种方式的效果和col
是一样的。$"columnName"
. 这种方式是scala的语法糖, 也会返回一个Column
类的实例。'cloumnName
. scala的另一个语法糖,也会返回一个Column
的实例。
具体的Transformation介绍
首先从数据源创建一个DataFrame
val movies = spark.read.parquet("<path>/chapter4/data/movies/movies.parquet")
select(cloumns)
操作
一个例子:
movies.select("movie_title","produced_year").show(5)
输出:
+-------------------+--------------+
| movie_title| produced_year|
+-------------------+--------------+
| Coach Carter| 2005|
| Superman II| 1980|
| Apollo 13| 1995|
| Superman| 1978|
| Back to the Future| 1985|
+-------------------+--------------+
值得注意的是,在select种如何传入多个列,那么引用列的方式要求统一,不可以一个用string的方式一个用Column
的方式。
另一个例子,当以Column
引用列的时候,可以用利用Column
的内置函数就行数学,逻辑计算。
movies.select('movie_title,('produced_year - ('produced_year % 10)).as("produced_decade")).show(5)
输出为:
+-------------------+----------------+
| movie_title| produced_decade|
+-------------------+----------------+
| Coach Carter| 2000|
| Superman II| 1980|
| Apollo 13| 1990|
| Superman| 1970|
| Back to the Future| 1980|
+-------------------+----------------+
selectExpr(expression)
操作
这个操作和select
的区别是,它可以接受一个或多个SQL表达式,而不是列名作为参数。
例子1:
movies.selectExpr("*","(produced_year - (produced_year % 10)) as decade").show(5)
输出为:
+-----------------+-------------------+--------------+-------+
| actor_name| movie_title| produced_year| decade|
+-----------------+-------------------+--------------+-------+
|McClure, Marc (I)| Coach Carter| 2005| 2000|
|McClure, Marc (I)| Superman II| 1980| 1980|
|McClure, Marc (I)| Apollo 13| 1995| 1990
这篇关于Spark SQL(二) DataFrames相关的Transformation操作的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!