Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 按组计算分位数(单位:年)_R_Apache Spark_Group By_Quantile_Sparklyr - Fatal编程技术网

R 按组计算分位数(单位:年)

R 按组计算分位数(单位:年),r,apache-spark,group-by,quantile,sparklyr,R,Apache Spark,Group By,Quantile,Sparklyr,我在Spark中有一个数据帧,希望在按特定列分组后计算0.1分位数 例如: >库(sparklyr) >图书馆(tidyverse) >con=火花_连接(..) >钻石=复制到(con,钻石) >钻石 #资料来源:表[?×10] #数据库:spark_连接 克拉切割颜色清晰度深度表价格x y z 1 0.230理想E SI2 61.5 55.0 326 3.95 3.98 2.43 2 0.210保费E SI1 59.8 61.0 326 3.89 3.84 2.31 3 0.230良好E V

我在Spark中有一个数据帧,希望在按特定列分组后计算0.1分位数

例如:

>库(sparklyr)
>图书馆(tidyverse)
>con=火花_连接(..)
>钻石=复制到(con,钻石)
>钻石
#资料来源:表[?×10]
#数据库:spark_连接
克拉切割颜色清晰度深度表价格x y z
1 0.230理想E SI2 61.5 55.0 326 3.95 3.98 2.43
2 0.210保费E SI1 59.8 61.0 326 3.89 3.84 2.31
3 0.230良好E VS1 56.9 65.0 327 4.05 4.07 2.31
4 0.290特优I VS2 62.4 58.0 334 4.20 4.23 2.63
5 0.310良好J SI2 63.3 58.0 335 4.34 4.35 2.75
6 0.240非常好J VVS2 62.8 57.0 336 3.94 3.96 2.48
7 0.240非常好I VVS1 62.3 57.0 336 3.95 3.98 2.47
8 0.260非常好H SI1 61.9 55.0 337 4.07 4.11 2.53
9 0.220公允价值VS2 65.1 61.0 337 3.87 3.78 2.49
10 0.230非常好的H VS1 59.4 61.0 338 4.00 4.05 2.39
我的第一个想法是使用group_by和SUMMARE,但显然分位数函数没有在SPARKYR中实现:

> diamonds_sdl %>% group_by(color) %>% summarise(q1=quantile(carat, .1))
Error: org.apache.spark.sql.AnalysisException: Undefined function: 'QUANTILE'. This function is neither a registered temporary function nor a permanent function registered in the database 'tsci
'.; line 1 pos 16
使用sdl_分位数没有运气,如下所示:。注意,我刚刚升级了Sparkyr,并从github运行了0.7.0-9004版

> diamonds_sdl %>% group_by(color) %>% summarise(q1=sdf_quantile(carat, .1))
Error: org.apache.spark.sql.AnalysisException: Undefined function: 'SDF_QUANTILE'. This function is neither a registered temporary function nor a permanent function registered in the database '
tsci'.; line 1 pos 16
如果我想计算整个列上的分位数,sdf_分位数可以工作-但这不是我感兴趣的:

> sdf_quantile(diamonds_sdl, "carat", 0.1)
 10%
0.31
我尝试过其他方法

第一种是使用spark_apply。然而,在我的安装中,它似乎不能正常工作。另一次运行返回一个错误,表示节点中未安装“Rscript”。但是,我无法真正解决这个问题,因为我没有管理员权限

> spark_apply(diamonds_sdl, function(x) quantile(x, 0.1))
Error: org.apache.spark.SparkException: Job aborted due to stage failure: Task 0 in stage 35.0 failed 4 times, most recent failure: Lost task 0.3 in stage 35.0 (TID 735, myserver
.com, executor 393): java.lang.Exception: sparklyr worker rscript failure with status 255, check worker logs for details.
        at sparklyr.Rscript.init(rscript.scala:98)
        at sparklyr.WorkerRDD$$anon$2.run(rdd.scala:95)
第二种方法是使用collect_list,如下所示:

#这个几乎可以用
>钻石sdl%>%按(颜色)分组%>%摘要(q1=粘贴(收集列表(如字符(克拉)))
#来源:惰性查询[?×2]
#数据库:spark_连接
颜色
1楼
2e
三维
4 J
5克
6我
7小时
q1
1 0.22 0.23 0.23 0.23 0.23 0.29 0.24 0.26 0.7 0.96 0.81 0.8 0.73 0.73 0.8 0.8 …
2 0.23 0.21 0.23 0.22 0.2 0.32 0.23 0.23 0.23 0.23 0.25 0.22 0.24 0.26 0.26 0.…
3 0.23 0.23 0.26 0.26 0.26 0.22 0.3 0.3 0.3 0.24 0.26 0.26 0.26 0.75 0.71 0.61…
4 0.31 0.24 0.3 0.23 0.31 0.3 0.3 0.3 0.31 0.31 0.3 0.33 0.3 1.17 1.05 1.05 1.…
5 0.23 0.23 0.28 0.31 0.31 0.24 0.7 0.78 0.74 0.75 0.75 0.8 0.74 0.71 0.64 0.7…
6 0.29 0.24 0.3 0.3 0.24 0.33 0.33 0.32 0.3 0.3 0.3 0.3 0.35 0.42 0.32 0.38 0.…
#但这里有一个错误
>钻石sdl%>%按(颜色)分组%>%汇总(q1=分位数(如数字)粘贴(如字符(如克拉‘‘‘‘‘‘‘‘‘)收集列表)
错误:org.apache.spark.sql.AnalysisException:未定义函数:“分位数”。此函数既不是已注册的临时函数,也不是在数据库“tsci”中注册的永久函数
'.; 第1行位置16

对于分组数据,您的最佳选择是
百分位\u近似值

diamonds_sdl %>% group_by(color) %>% summarise(q1 = percentile_approx(carat, .1))
#来源:惰性查询[??x2]
#数据库:spark_连接
颜色q1
1h0.310
2f0.310
3g0.310
4 I 0.320
5 J 0.400
6d0.310
7 E 0.300

但是,这是必需的Spark,启用了配置单元支持,效率低于内置的
approxQuantile

谢谢,但我得到了错误:percentile_近似值中的错误(克拉,0.1):找不到函数“percentile_近似值”。我应该加载其他库吗?不确定如何在Spark中启用配置单元支持,以及我是否可以在没有管理员权限的情况下启用配置单元支持。最后,我在配置单元SQL中创建了一个带有分位数摘要的表,并从中查询了它。奇怪。当您调用
sc%>%spark\u session%>%invoke(“conf”)%%>%invoke(“get”,“spark.sql.catalogImplementation”)
时,您会得到什么?它只是说“hive”