Spark之CASE...WHEN...THEN...的两种实现方式

简介: 在Spark中,dataframe是常用的数据格式,类似于数据库中的表。本文将介绍如何在dataframe中实现CASE…WHEN…THEN的两种方法。

在Spark中,dataframe是常用的数据格式,类似于数据库中的表。本文将介绍如何在dataframe中实现CASE…WHEN…THEN的两种方法。
一种是将dataframe看成数据库中的表,即使用createOrReplaceTempView()函数,之后利用数据库的CASE…WHTN…THEN进行操作。另一种方法是,利用pyspark.sql.functions的when().otherwise()函数。实例代码如下:

#载入包
from pyspark.sql import SparkSession
from pyspark import SparkConf, SparkContext
import pyspark.sql.functions as F
#spark初始化
conf = SparkConf()
APPNAME = 'spark_temporal_test'
conf.set("spark.app.name", APPNAME)
spark = SparkSession.builder.config(conf=conf).getOrCreate()
#创建dataframe
df = spark.createDataFrame([[1,'A'],[2,'B'],[3,'C'],[4,'C'],[5,'B'],[6,'A'],[7,'D'],\
                            [8,'A'],[9,'B'],[10,'C'],[11,'C'],[12,'B'],[13,'A'],[14,'D'],\
                            [15,'A'],[16,'B'],[17,'C'],[18,'C'],[19,'B'],[20,'']],['id','split'])
df = df.withColumn('rand', F.rand(1))
#CASE WHEN的实现1
df = df.withColumn('mod_val_test1',F.when(df['rand'] <= 0.35,1).when(df['rand'] <= 0.7, 2).otherwise(3))
#CASE WHEN的实现2
df.createOrReplaceTempView("temp")
df= spark.sql("""select *, case when rand <= %s then 1
                                when rand <= %s then 2
                                else 3 end as mod_val_test2
                        from temp"""%(0.35,0.7))
#输出,查看结果
print(df.show())

运行结果如下:
这里写图片描述



本次分享到此结束,欢迎大家交流与批评~~

目录
相关文章
|
分布式计算 资源调度 Kubernetes
[翻译]Spark on MR3——运行 Apache Spark 的新方式
> 此文是对 Spark on MR3 资料的翻译 原文链接:https://www.datamonad.com/post/2021-08-18-spark-mr3/ 代码链接:https://github.com/mr3project/spark-mr3 MR3 是一个通用的执行引擎,原生支持 Hadoop 和 Kubernetes。虽然 Hive on MR3 是主要应用,但 MR3 也可以
464 0
[翻译]Spark on MR3——运行 Apache Spark 的新方式
|
分布式计算 数据挖掘 大数据
Spark 入门_代码编写方式|学习笔记
快速学习 Spark 入门_代码编写方式
75 0
Spark 入门_代码编写方式|学习笔记
|
SQL 分布式计算 Scala
Pandas vs Spark:获取指定列的N种方式
本篇继续Pandas与Spark常用操作对比系列,针对常用到的获取指定列的多种实现做以对比。 注:此处的Pandas特指DataFrame数据结构,Spark特指spark.sql下的DataFrame数据结构。
568 0
Pandas vs Spark:获取指定列的N种方式
|
分布式计算 Spark
用命令行的方式运行Spark平台的wordcount项目
用命令行的方式运行Spark平台的wordcount项目
125 0
用命令行的方式运行Spark平台的wordcount项目
|
分布式计算 算法 搜索推荐
Spark排序算法系列之GBTs使用方式介绍
在本篇文章中你可以学到: Spark MLLib包中的GBDT使用方式 模型的通过保存、加载、预测 PipeLine ML包中的GBDT
|
分布式计算 算法 调度
Spark TaskSchedulerImpl 任务调度方式(FIFO)
Spark任务调度器,实现stage放到调度池中,和取时对调度池是队列进行排序的FIFO先进先出算法
1704 0