Spark SQL(二) DataFrames相关的Transformation操作

2024-03-29 17:58

本文主要是介绍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")
  1. 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|
+-------------------+----------------+
  1. 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操作的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/859259

相关文章

C# WinForms存储过程操作数据库的实例讲解

《C#WinForms存储过程操作数据库的实例讲解》:本文主要介绍C#WinForms存储过程操作数据库的实例,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、存储过程基础二、C# 调用流程1. 数据库连接配置2. 执行存储过程(增删改)3. 查询数据三、事务处

Java使用Curator进行ZooKeeper操作的详细教程

《Java使用Curator进行ZooKeeper操作的详细教程》ApacheCurator是一个基于ZooKeeper的Java客户端库,它极大地简化了使用ZooKeeper的开发工作,在分布式系统... 目录1、简述2、核心功能2.1 CuratorFramework2.2 Recipes3、示例实践3

Java利用JSONPath操作JSON数据的技术指南

《Java利用JSONPath操作JSON数据的技术指南》JSONPath是一种强大的工具,用于查询和操作JSON数据,类似于SQL的语法,它为处理复杂的JSON数据结构提供了简单且高效... 目录1、简述2、什么是 jsONPath?3、Java 示例3.1 基本查询3.2 过滤查询3.3 递归搜索3.4

mysql出现ERROR 2003 (HY000): Can‘t connect to MySQL server on ‘localhost‘ (10061)的解决方法

《mysql出现ERROR2003(HY000):Can‘tconnecttoMySQLserveron‘localhost‘(10061)的解决方法》本文主要介绍了mysql出现... 目录前言:第一步:第二步:第三步:总结:前言:当你想通过命令窗口想打开mysql时候发现提http://www.cpp

MySQL大表数据的分区与分库分表的实现

《MySQL大表数据的分区与分库分表的实现》数据库的分区和分库分表是两种常用的技术方案,本文主要介绍了MySQL大表数据的分区与分库分表的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有... 目录1. mysql大表数据的分区1.1 什么是分区?1.2 分区的类型1.3 分区的优点1.4 分

MySQL错误代码2058和2059的解决办法

《MySQL错误代码2058和2059的解决办法》:本文主要介绍MySQL错误代码2058和2059的解决办法,2058和2059的错误码核心都是你用的客户端工具和mysql版本的密码插件不匹配,... 目录1. 前置理解2.报错现象3.解决办法(敲重点!!!)1. php前置理解2058和2059的错误

Mysql删除几亿条数据表中的部分数据的方法实现

《Mysql删除几亿条数据表中的部分数据的方法实现》在MySQL中删除一个大表中的数据时,需要特别注意操作的性能和对系统的影响,本文主要介绍了Mysql删除几亿条数据表中的部分数据的方法实现,具有一定... 目录1、需求2、方案1. 使用 DELETE 语句分批删除2. 使用 INPLACE ALTER T

MySQL INSERT语句实现当记录不存在时插入的几种方法

《MySQLINSERT语句实现当记录不存在时插入的几种方法》MySQL的INSERT语句是用于向数据库表中插入新记录的关键命令,下面:本文主要介绍MySQLINSERT语句实现当记录不存在时... 目录使用 INSERT IGNORE使用 ON DUPLICATE KEY UPDATE使用 REPLACE

MySQL Workbench 安装教程(保姆级)

《MySQLWorkbench安装教程(保姆级)》MySQLWorkbench是一款强大的数据库设计和管理工具,本文主要介绍了MySQLWorkbench安装教程,文中通过图文介绍的非常详细,对大... 目录前言:详细步骤:一、检查安装的数据库版本二、在官网下载对应的mysql Workbench版本,要是

mysql数据库重置表主键id的实现

《mysql数据库重置表主键id的实现》在我们的开发过程中,难免在做测试的时候会生成一些杂乱无章的SQL主键数据,本文主要介绍了mysql数据库重置表主键id的实现,具有一定的参考价值,感兴趣的可以了... 目录关键语法演示案例在我们的开发过程中,难免在做测试的时候会生成一些杂乱无章的SQL主键数据,当我们