val survived_sex_percent = survived_sex_count.withColumn("percent", format_number(col("count").divide(sum("count").over()).multiply(100), 5));
时间: 2024-03-31 19:37:03 浏览: 19
这是一段Spark SQL代码。它的作用是计算在一个数据集中,存活者的性别分布所占比例。具体来说,它首先对数据集按照性别和存活状态进行分组统计,得到每个组中存活者的数量。然后,它使用窗口函数`sum("count").over()`计算出总的存活者数量,并对每个组中存活者的数量进行除法运算,得到每个组中存活者所占总存活者数量的比例。最后,使用`format_number`函数将比例格式化为保留5位小数的字符串,并将其添加到数据集中。
相关问题
val survived_sex_count = df2.groupBy("Sex", "Survived").count() val survived_sex_percent = survived_sex_count.withColumn("percent", format_number(col("count") .divide(sum("count").over()) .multiply(100), 5)); survived_sex_percent.show() 中sum("count").over() 存在问题
对于`sum("count").over()`的问题,这是因为`over()`函数需要指定窗口范围,表示对哪些数据进行求和,而在这里未指定窗口范围,因此报错。
如果想要对每个不同的`Sex`进行比例计算,则需要在`over()`函数中指定分区窗口,以便对每个窗口内的数据进行求和。
可以尝试修改成以下代码:
```
import org.apache.spark.sql.expressions.Window
val windowSpec = Window.partitionBy("Sex")
val survived_sex_percent = survived_sex_count.withColumn("percent", format_number(col("count").divide(sum("count").over(windowSpec)).multiply(100), 5));
survived_sex_percent.show()
```
在这个修改后的代码中,`Window.partitionBy("Sex")`表示按照`Sex`字段进行分区,然后在`over()`函数中指定了窗口范围,表示对每个分区内的数据进行求和。这样就可以正确计算每个分区内存活者的性别分布所占比例,并输出结果。
.divide(sum("count").over()) 在val survived_sex_percent = survived_sex_count.withColumn("percent", format_number(col("count").divide(sum("count").over()).multiply(100), 5));报错 可能存在那些问题
这个错误可能是因为`sum("count").over()`这个窗口函数的作用范围不正确导致的。具体来说,`sum("count").over()`表示对整个数据集中的`count`列进行求和,但是在这个语句中,它应该是对每个分组内的数据进行求和,所以需要加上`partitionBy`子句表示按照分组字段进行求和。
可以尝试修改成以下代码:
```
val windowSpec = Window.partitionBy("sex")
val survived_sex_percent = survived_sex_count.withColumn("percent", format_number(col("count").divide(sum("count").over(windowSpec)).multiply(100), 5));
```
在这个修改后的代码中,`Window.partitionBy("sex")`表示按照`sex`字段进行分组,然后再对每个分组内的数据进行求和。这样就可以正确地计算每个分组内存活者的性别分布所占比例。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![xlsx](https://img-home.csdnimg.cn/images/20210720083732.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)