Apache spark Pyspark中带有IN子句的Case-when语句

Apache spark Pyspark中带有IN子句的Case-when语句,apache-spark,pyspark,pyspark-sql,Apache Spark,Pyspark,Pyspark Sql,我是Spark编程新手,有一个场景可以在输入中出现一组值时分配一个值。下面是我用来完成任务的传统SQL代码。在Spark中也需要这样做 Sql代码: SELECT CASE WHEN c.Number IN ( '1121231', '31242323' ) THEN 1 ELSE 2 END AS Test FROM Input c 我知道使用时,火花只有一个条件 Input.select(when(Input.Number==1121231,1).otherwise(2).alia

我是Spark编程新手,有一个场景可以在输入中出现一组值时分配一个值。下面是我用来完成任务的传统SQL代码。在Spark中也需要这样做

Sql代码:

SELECT CASE WHEN c.Number IN ( '1121231', '31242323' ) THEN 1 
ELSE 2 END AS Test
FROM   Input  c
我知道使用时,火花只有一个条件

Input.select(when(Input.Number==1121231,1).otherwise(2).alias("Test")).show()

我假设您使用的是Spark数据帧,而不是RDD。需要注意的一点是,您可以直接在数据帧上运行SQL查询:

注册数据帧,以便我们可以在查询中引用它 sqlContext.registerDataFrameAsTabledf,df 将SQL查询放入字符串中 query=选择CASE WHEN '1121231'、'31242323'中的df.number,然后是1或2,作为测试结束 来自df 结果=sqlContext.sqlquery 结果显示 您还可以通过创建一个模拟查询的case语句来使用select:

从pyspark.sql.types导入* 从pyspark.sql.functions导入udf 需要通过udf传递内部函数,以便它可以对列进行操作 还需要指定返回类型 列表中的列=自定义项 lambda列:如果['1121231','31242323']中的列为1,则为2, 整型 对列调用函数,命名转换后的列 结果=df.selectcolumn\u在列表中df.number.aliastransformed 结果显示
谢谢你的回复。成功了。有没有一种方法可以直接在spark数据帧上使用when函数并给出一个值列表?我想我找到了我想要做的事情。当字符为n'H',O',M',1。otherwise0@user3258274这也行。还可以通过将数据帧转换为rdd并进行收集,从列中提取值列表,如下所示:rdd=df.rdd;rdd.maplambda x:x.transform.collect。