Sparklyr 0.5 包已经在CRAN正式发布,新的版本在以下几个方面做了优化:
1)加强对dplyr支持,如do( )和n_distinct( )
2)增加新的函数,如sdf_quantile( )、ft_tokenizer( )、ft_regex_tokenizer( )
3)强化对R的兼容性,如缺失值na.action、dim( )、nrow( )、ncol( )
4)spark.rstudio.com 上部署新的案例等
其他的最新优化,可以到官网查看噢!
1. 强化对Dplyr支持
sparklyr 0.5
添加了n_distinct( ),在速度和准确度上与length(uqique(x))相当,同时支持do( )和group_by( ),程序如下:
library(sparklyr)sc <- spark_connect(master = "local")mtcars_tbl <- copy_to(sc, mtcars, overwrite = TRUE)by_cyl <- group_by(mtcars_tbl, cyl)fit_sparklyr <- by_cyl %>%
do(mod = ml_linear_regression(mpg ~ disp, data = .))# display resultsfit_sparklyr$mod
输出:
[[1]]
Call: ml_linear_regression(mpg ~ disp, data = .)
Coefficients:
(Intercept) disp
19.081987419 0.003605119
[[2]]
Call: ml_linear_regression(mpg ~ disp, data = .)
Coefficients:
(Intercept) disp
40.8719553 -0.1351418
[[3]]
Call: ml_linear_regression(mpg ~ disp, data = .)
Coefficients:
(Intercept) disp
22.03279891 -0.01963409
在这里需要注意的是,当sparklyr提供对dplyr支持时,在使用sparklyr时,并不一定必须要使用dplyr。比如可以使用DBI 而不使用dplyr。
library(sparklyr)
library(DBI)sc <- spark_connect(master = "local")
sdf_copy_to(sc, iris)
dbGetQuery(sc, "SELECT * FROM iris LIMIT 4")
Sepal_Length Sepal_Width Petal_Length Petal_Width Species
1 5.1 3.5 1.4 0.2 setosa
2 4.9 3.0 1.4 0.2 setosa
3 4.7 3.2 1.3 0.2 setosa
4 4.6 3.1 1.5 0.2 setosa
5 5.0 3.6 1.4 0.2 setosa
2. 新的函数
当使用ft_tokenizer( )和ft_regex_tokenizer( )通过空格或者正则模式划分字符串时,sdf_quantile( )函数计算近似分位数(存在一定误差)。下面以ft_tokenizer函数为例。
library(sparklyr)
library(janeaustenr)
library(dplyr)
sc %>%
spark_dataframe() %>%
na.omit() %>%
ft_tokenizer(input.col = “text”, output.col = “tokens”) %>%
head(4)
输出:
text book tokens
<chr> <chr> <list>
1 SENSE AND SENSIBILITY Sense & Sensibility <list [3]>
2 Sense & Sensibility <list [1]>
3 by Jane Austen Sense & Sensibility <list [3]>
4 Sense & Sensibility <list [1]>
3. 增强兼容性
library(sparklyr)
library(dplyr)
library(nycflights13)sc <- spark_connect(master = "local")flights_clean <- na.omit(copy_to(sc, flights))
ml_linear_regression(
flights_tbl
response = "dep_delay",
features = c("arr_delay", "arr_time"))
* Dropped 9430 rows with 'na.omit' (336776 => 327346)
Call: ml_linear_regression(flights_tbl, response = "dep_delay",features = c("arr_delay", "arr_time"))
Coefficients:
(Intercept) arr_delay arr_time
6.1001212994 0.8210307947 0.0005284729
除此之外,dim( )、nrow( )和ncol( )在sparklyr的数据框中也已经支持。
4. Livy连接使用
Livy是是Apache Spark的一个开源REST服务,现在可以在sparklyr 0.5中使用,在许多场景下,在Livy可用时,可以将RStudio和Apache Spark进行连接。
在本地使用Livy时,可以使用livy_install( )安装Livy在本地环境,这与spark_install( )类似。Livy支持远程连接Apache Spark时,需要先使用livy_service_start( )。
livy_install()
livy_service_start()sc <- spark_connect(master = "http://localhost:8998", method = "livy")
copy_to(sc, iris)
spark_disconnect(sc)
livy_service_stop()
在使用RStudio时,远程连接样式如下:
5. 增强连接
sparklyr 0.5 不再要求必须联网下载Apache Spark包
> library(sparklyr)> sc <- spark_connect(master = "local", config = list("sparklyr.gateway.port" = "0"))Error in force(code) :
Failed while connecting to sparklyr to port (0) for sessionid (5305): Gateway in port (0) did not respond. Path: /spark-1.6.2-bin-hadoop2.6/bin/spark-submit
Parameters: --class, sparklyr.Backend, 'sparklyr-1.6-2.10.jar', 0, 5305---- Output Log ----16/12/12 12:42:35 INFO sparklyr: Session (5305) starting---- Error Log ----
备注:其他最新功能请点击阅读原文进行学习~