【问题标题】:Selecting N rows in R using Sparklyr使用 Sparklyr 在 R 中选择 N 行
【发布时间】:2019-03-16 18:41:25
【问题描述】:

我正在尝试使用 Sparklyr 选择不同的 SparkDataframe 中间行。

我一直在寻找它,但我没有找到它(只有 headtail 功能,但我不想要这些)。是否有一个 sparklyr 函数可以与传统的 R 处理数据框的维度一样? 我需要创建一个包含 n:m 行 SparkDataframe 的 R 数据框。

例如,如果 n=1 且 m=5:

传统 R

data(iris)

iris2 <- iris[1 : 5, ]

Sparklyr

sc <- spark_connect(master = "local")
iris_tbl <- sdf_copy_to(sc, iris, name = "iris", overwrite = TRUE)

提示:我正在查看 slice(),但在编码时出现错误:

iris2 <- iris_tbl %>% slice(1:5) %>% collect()

no applicable method for 'slice' applied to an object of class "c('tbl_spark', 'tbl_sql', 'tbl_lazy', 'tbl')"

谢谢!

【问题讨论】:

    标签: r sparklyr


    【解决方案1】:

    制作一个索引列,然后过滤掉上下索引。因此,如果我想保持 5:7,我会这样做:

    iris_tbl <- sdf_copy_to(sc, iris, name = "iris", overwrite = TRUE) %>%
      sdf_with_sequential_id(id = "index") %>%
      filter(5<=index, index<=7)
    

    希望对你有帮助

    【讨论】:

    • @strawberryBeef 请注意,使用时应格外小心。它不会触发对输入的额外操作,这可能是一个问题,由于Dataset -> RDD -> Dataset 转换非常昂贵,但也假设表具有确定性顺序,这可能或可能不是这种情况,具体取决于上游流程。
    • @zero323 您能否详细说明该评论? The documentation 提到该函数使用 zipWithIndex Scala 函数;我希望它的工作原理与通过 sparklyr 提供的其余 sdf_* 函数类似。我想更好地理解它,因为dataset -> RDD -> dataset 转换对我想通过这个解决方案处理的数据集来说是灾难性的。
    猜你喜欢
    • 1970-01-01
    • 2017-04-26
    • 2011-05-24
    • 1970-01-01
    • 2021-05-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-20
    相关资源
    最近更新 更多