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|
|McClur

本文详细介绍了Spark SQL中DataFrame的Transformation操作,包括select、filter、distinct、sort、limit等,以及如何引用列,提供了丰富的示例展示DataFrame的使用方法,帮助理解DataFrame的数据处理过程。
最低0.47元/天 解锁文章
401

被折叠的 条评论
为什么被折叠?



