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

来源:互联网 发布:广州知行通航 编辑:程序博客网 时间:2024/06/06 19:29

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

#载入包from pyspark.sql import SparkSessionfrom pyspark import SparkConf, SparkContextimport 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()#创建dataframedf = 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的实现1df = df.withColumn('mod_val_test1',F.when(df['rand'] <= 0.35,1).when(df['rand'] <= 0.7, 2).otherwise(3))#CASE WHEN的实现2df.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())

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



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