当前 (5-28-2017) 的dplyr
0.6.0 开发版本似乎不允许与当前 CRAN 版本sparklyr
0.5.5 的通用列名连接。 这意味着如果此版本的dplyr
在sparklyr
也在 CRAN 上更新之前在 CRAN 上成为当前版本,那么生产用户代码将在批量更新时中断(例如update.packages()
)。 作为sparklyr
用户,我建议将其视为重要的依赖包 ( sparklyr
) 打破dplyr
建议的 CRAN 更新(无论sparklyr
的自动检查状态如何)
如果我们升级到sparklyr
0.5.5.9000 的开发版本,问题似乎就消失了。
我正在重新提交问题,因为我已经改进了reprexes,并测试和记录了更多的包版本组合。 我在这里重新提交它,因为这个问题似乎与dplyr
本身有关(尤其是sparklyr
似乎已经有了一个只需要渗透到 CRAN 的修复程序)。
失败和成功的代表如下。
# devtools::install_github("tidyverse/dplyr")
# devtools::install_github('tidyverse/dbplyr')
suppressPackageStartupMessages(library('dplyr'))
library('sparklyr')
sc <- spark_connect(version='2.0.2',
master = "local")
d1 <- copy_to(sc, data.frame(x=1:3, y=4:6), 'd1')
d2 <- copy_to(sc, data.frame(x=1:3, y=7:9), 'd2')
left_join(d1, d2, by='x')
#> Error: Column `y` must have a unique name
# print versions
packageVersion("dplyr")
#> [1] '0.6.0'
packageVersion("sparklyr")
#> [1] '0.5.5'
if(requireNamespace("dbplyr", quietly = TRUE)) {
packageVersion("dbplyr")
}
#> [1] '0.0.0.9001'
R.Version()$version.string
#> [1] "R version 3.4.0 (2017-04-21)"
# cleanup
spark_disconnect(sc)
# devtools::install_github("tidyverse/dplyr")
# devtools::install_github('tidyverse/dbplyr')
suppressPackageStartupMessages(library('dplyr'))
library('sparklyr')
sc <- spark_connect(version='2.0.2',
master = "local")
d1 <- copy_to(sc, data.frame(x=1:3, y=4:6), 'd1')
d2 <- copy_to(sc, data.frame(x=1:3, y=7:9), 'd2')
left_join(d1, d2, by='x')
#> # Source: lazy query [?? x 3]
#> # Database: spark_connection
#> x y.x y.y
#> <int> <int> <int>
#> 1 1 4 7
#> 2 2 5 8
#> 3 3 6 9
# print versions
packageVersion("dplyr")
#> [1] '0.6.0'
packageVersion("sparklyr")
#> [1] '0.5.5.9000'
if(requireNamespace("dbplyr", quietly = TRUE)) {
packageVersion("dbplyr")
}
#> [1] '0.0.0.9001'
R.Version()$version.string
#> [1] "R version 3.4.0 (2017-04-21)"
# cleanup
spark_disconnect(sc)
感谢您报告此@JohnMount ,非常感谢。
这里的问题是,为了支持sparklyr
中的连接, sparklyr
必须在以前的版本中覆盖dplyr
内部,避免使用USING
的修复现在支持dplyr
; 但是, sparklyr
仍然覆盖内部结构,并且dplyr
的内部结构发生了显着变化,导致了这个问题。
我认为最好的方法是在发布dplyr 0.6
的同时为sparklyr
发布补丁。 这是更改https://github.com/rstudio/sparklyr/commit/0c39d2e403a66b6ae3ed563a09003cdbb23ffbeb和 CRAN 补丁: https ://github.com/rstudio/sparklyr/releases/tag/v0.5.6
@JohnMount如果您可以试用这个v0.5.6
补丁,这将对社区非常有帮助,非常感谢! 该修复仅影响JOINS
,但不限于LEFT JOINS
。
@hadley当您向 CRAN 提交dplyr 0.6
以提交sparklyr 0.5.6
补丁时,您能在 Slack 上 ping 我吗?
谢谢@javierluraschi ,
看起来dplyr
0.7.0
已经在 CRAN 上运行,并且(如预期的那样)不适用于 CRAN 0.5.5
版本的Sparklyr
:
suppressPackageStartupMessages(library('dplyr'))
library('sparklyr')
sc <- spark_connect(version='2.0.2',
master = "local")
d1 <- copy_to(sc, data.frame(x=1:3, y=4:6), 'd1')
d2 <- copy_to(sc, data.frame(x=1:3, y=7:9), 'd2')
left_join(d1, d2, by='x')
#> Error: Column `y` must have a unique name
# print versions
packageVersion("dplyr")
#> [1] '0.7.0'
packageVersion("sparklyr")
#> [1] '0.5.5'
if(requireNamespace("dbplyr", quietly = TRUE)) {
packageVersion("dbplyr")
}
#> [1] '1.0.0'
R.Version()$version.string
#> [1] "R version 3.4.0 (2017-04-21)"
# cleanup
spark_disconnect(sc)
devtools::install_github("rstudio/sparklyr")
Give 似乎运行良好(但请注意,这会降低dbplyr
的版本):
suppressPackageStartupMessages(library('dplyr'))
library('sparklyr')
sc <- spark_connect(version='2.0.2',
master = "local")
d1 <- copy_to(sc, data.frame(x=1:3, y=4:6), 'd1')
d2 <- copy_to(sc, data.frame(x=1:3, y=7:9), 'd2')
left_join(d1, d2, by='x')
#> # Source: lazy query [?? x 3]
#> # Database: spark_connection
#> x y.x y.y
#> <int> <int> <int>
#> 1 1 4 7
#> 2 2 5 8
#> 3 3 6 9
# print versions
packageVersion("dplyr")
#> [1] '0.7.0'
packageVersion("sparklyr")
#> [1] '0.5.5.9002'
if(requireNamespace("dbplyr", quietly = TRUE)) {
packageVersion("dbplyr")
}
#> [1] '0.0.0.9001'
R.Version()$version.string
#> [1] "R version 3.4.0 (2017-04-21)"
# cleanup
spark_disconnect(sc)
我们可能会要求人们“转到 Sparklyr 的开发版本”,但是为了确保给定标签或分支是稳定的以及确切需要什么版本的东西,这将是一件好事。 希望 CRAN 能让你快速发布Sparklyr
补丁(如果你问的话,他们有时会这样做)。
sparklyr
修复正在提交给 CRAN 等待响应...
@JohnMount现在在 CRAN 上。