Spark之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())

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



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

  • 3
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值