我四处张望,但仍然无法使这三个dplyr函数在sparklyr中工作。我在下面有一个可复制的示例。首先,一些会话信息:
R版本3.4.3(2017-11-30)
平台:x86_64-pc-linux-gnu(64位)
运行在:Red Hat Enterprise Linux Server 7.4(Maipo)
我正在运行dplyr 0.7.4,sparklyr 0.8.3,spark版本2.2.0
这是在sparklyr外部运行dplyr代码的(预期)结果:
set.seed(999)
df <- data.frame(group = letters[rep(1:4, each = 2)],
class = letters[rep(1:4, by = 2)],
value = rnorm(8), stringsAsFactors = FALSE)
> df
group class value
1 a a -0.9677497
2 a b -1.1210094
3 b c 1.3254637
4 b d 0.1339774
5 c a 0.9387494
6 c b 0.1725381
7 d c 0.9576504
8 d d -1.3626862
df %>%
group_by(group) %>%
summarize(value = sum(value),
class = first(class))
# A tibble: 4 x 3
group value class
<chr> <dbl> <chr>
1 a -1.59 a
2 b 1.07 c
3 c -0.843 a
4 d -3.15 c
但是,当我在该data.frame上复制以触发时,结果不是我期望的:
df <- sdf_copy_to(sc, df, "df", memory = FALSE, overwrite = TRUE)
df %>%
group_by(group) %>%
summarize(value = sum(value),
class = first(class))
# Source: lazy query [?? x 3]
# Database: spark_connection
group value class
<chr> <dbl> <chr>
1 d -3.15 `class`
2 c -0.843 `class`
3 b 1.07 `class`
4 a -1.59 `class`
我还尝试查看是否存在名称空间问题,但这不能解决此问题:
df %>%
group_by(group) %>%
summarize(value = sum(value),
class = dplyr::first(class))
Error in x[[n]] : object of type 'builtin' is not subsettable
在我的不可复制示例中,有时我还会收到以下错误,具体取决于我如何更改代码,但是对于该示例,我没有得到显示。
Error in nth(x, -1L, order_by = order_by, default = default) :
object 'class' not found
任何帮助(包括替代方案)将不胜感激!
最佳答案
我有同样的问题,这应该工作。
df %>%
group_by(group) %>%
summarize(value = sum(value),
class = first_value(class))
它既适用于字符列,也适用于数字列。
顺便说一句,我正在使用dplyr 0.8.0.1和sparklyr 0.9.4
关于r - 在sparklyr中使用first,last,nth,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51486774/