我四处张望,但仍然无法使这三个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/

10-12 17:44