首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在SparkR数据中获取百分位数作为列

在SparkR数据中获取百分位数作为列
EN

Stack Overflow用户
提问于 2018-01-08 10:35:30
回答 1查看 239关注 0票数 0

我有如下所示的火花数据框架(虚拟数据),并希望使用SparkR将百分位数作为列添加到其中

代码语言:javascript
复制
UserId Values
  U1     5
  U2     50
  U3     76
  .
  .
  .
  . 
  .
  U1000   8

示例:

代码语言:javascript
复制
 UserId Values   Percentile
      U1     5     0.011144
      U2     50    0.212245
      U3     76    0.811986 
      .
      .
      .
      . 
      .
      U1000   8    0.0134567
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-01-08 15:59:23

好的,有一个函数percent_rank,但它只在窗口分区上操作;修改文档示例:

代码语言:javascript
复制
library(SparkR)
library(magrittr)
sparkR.version()
# [1] "2.2.0"    

df <- createDataFrame(mtcars)
ws <- orderBy(windowPartitionBy("am"), "hp")
out <- select(df, over(percent_rank(), ws), df$hp, df$am)
out <- out %>% withColumnRenamed(colnames(out)[1], 'percentile') # get rid of the ridiculously long column name 
head(out)
#   percentile  hp am
# 1 0.00000000  62  0
# 2 0.05555556  95  0
# 3 0.11111111  97  0
# 4 0.16666667 105  0
# 5 0.22222222 110  0
# 6 0.27777778 123  0

如果您不想要一个窗口分区,而是一个全局百分位数(在您的情况下),我可以想到的最简单的方法是首先添加一个虚拟常量列和组,然后可以删除它。因此,下面是上面的示例,但这次没有使用am进行分区

代码语言:javascript
复制
df_new = df %>% withColumn("dummy", lit("N"))
ws <- orderBy(windowPartitionBy('dummy'), "hp")
out <- select(df_new, over(percent_rank(), ws), df_new$hp)
out <- out %>% withColumnRenamed(colnames(out)[1], 'percentile')

collect(out)的结果是

代码语言:javascript
复制
   percentile  hp
1  0.00000000  52
2  0.03225806  62
3  0.06451613  65
4  0.09677419  66
5  0.09677419  66
6  0.16129032  91
7  0.19354839  93
8  0.22580645  95
9  0.25806452  97
10 0.29032258 105
11 0.32258065 109
12 0.35483871 110
13 0.35483871 110
14 0.35483871 110
15 0.45161290 113
16 0.48387097 123
17 0.48387097 123
18 0.54838710 150
19 0.54838710 150
20 0.61290323 175
21 0.61290323 175
22 0.61290323 175
23 0.70967742 180
24 0.70967742 180
25 0.70967742 180
26 0.80645161 205
27 0.83870968 215
28 0.87096774 230
29 0.90322581 245
30 0.90322581 245
31 0.96774194 264
32 1.00000000 335
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48148501

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档