pysparkdataframe when函数写多个条件时
时间: 2024-05-23 16:16:34 浏览: 116
可以使用pyspark.sql.functions的and_()和or_()函数进行条件组合,示例代码如下:
from pyspark.sql.functions import col, when, and_, or_
df = spark.createDataFrame([(1, 20, "M"), (2, 30, "F"), (3, 25, "M"), (4, 35, "F"), (5, 40, "M")], ["id", "age", "gender"])
df.select("*", when((col("age")>25) & (col("gender")=="M"), "Male over 25").\
when((col("age")>25) & (col("gender")=="F"), "Female over 25").\
when((col("age")<=25) & (col("gender")=="M"), "Male under 25").\
when((col("age")<=25) & (col("gender")=="F"), "Female under 25").\
otherwise("Unknown").alias("category")).show()
相关问题
pyspark dataframe怎么统计每列非空值得数量
可以使用`pyspark.sql.functions`中的`count`函数和`when`函数来统计每列非空值的数量。具体操作如下:
```python
from pyspark.sql.functions import count, when
# 假设df为一个DataFrame对象
# 统计每列非空值的数量
df.agg(*[count(when(df[col].isNotNull(), col)).alias(col) for col in df.columns]).show()
```
解析:
* `df[col].isNotNull()`表示判断列`col`是否为空值。
* `when(df[col].isNotNull(), col)`表示当列`col`不为空值时,返回列`col`的值。否则返回`NULL`。
* `count(when(df[col].isNotNull(), col)).alias(col)`表示统计返回值中非空值的数量,并将统计结果的列名设置为`col`。
上述代码中使用了`agg`函数,它可以对整个DataFrame进行聚合操作,并返回聚合结果。`agg`函数的参数是一个可迭代对象,其中每个元素都是一个聚合函数。因此,我们可以使用列表解析式生成一个包含所有聚合函数的列表,然后将其作为`agg`函数的参数。
sql语句CASE WHEN多个判断条件怎么写
可以使用如下的语法格式:
```
SELECT
CASE
WHEN condition1 THEN result1
WHEN condition2 THEN result2
WHEN condition3 THEN result3
...
ELSE default_result
END
FROM table_name;
```
其中,`condition1`、`condition2`、`condition3`等是多个判断条件,`result1`、`result2`、`result3`等是对应条件为真时的结果,`default_result`是所有条件都不满足时的默认结果。
例如,假设有一个表`students`,其中包含学生的姓名、年龄和成绩信息,现在需要根据学生成绩来判断成绩属于哪个等级(优秀、良好、及格、不及格),可以使用如下的SQL语句:
```
SELECT
name,
score,
CASE
WHEN score >= 90 THEN '优秀'
WHEN score >= 80 THEN '良好'
WHEN score >= 60 THEN '及格'
ELSE '不及格'
END AS level
FROM students;
```
这样就可以根据学生成绩来判断成绩属于哪个等级,并将结果返回。