且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

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

更新时间:2022-03-25 17:34:13

在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())

运行结果如下:
Spark之CASE...WHEN...THEN...的两种实现方式



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