【问题标题】:Last Rows from a Spark DataFrame (using sparklyr & dplyr)Spark DataFrame 中的最后一行(使用 sparklyr 和 dplyr)
【发布时间】:2017-04-27 17:29:17
【问题描述】:

想要使用类似 tail function 下面的行范围使用 sparklyr 打印以下数据帧的最后 50 行,没有 arrangecollect - 我的一些帧很大并且没有顺序列。

library(sparklyr)
library(dplyr)
library(Lahman)

spark_install(version = "2.0.0")
sc <- spark_connect(master = "local")

batting_tbl <- copy_to(sc, Lahman::Batting, "batting"); batting_tbl
batting_tbl %>% count # Number of rows 
    #   n
    #  <dbl>
    #   1 101332

batting_tbl %>% tail(., n = 50)
# Error: tail() is not supported by sql sources

【问题讨论】:

  • 为什么不在调用tail之前命名你最终排序的data.frame? tail(namedData,n=50)
  • 您的建议将适用于按索引排序,然后采用 Spark DataFrame。

标签: r apache-spark dplyr sparkr sparklyr


【解决方案1】:

这是一种解决方案(返回未排序的尾部):

tbl_df(batting_tbl) %>% slice(101282:101332) # Prints the last 50 rows

这是第二种解决方案(过滤器索引):

tbl_df(batting_tbl) %>% arrange(-as.numeric(rownames(.))) %>% head(., n = 50)

**注意:以上两个都需要tbl_df,而batting_tbl %&gt;% head(., n = 50) 不需要收集到R data.frame,并且往往需要更少的时间来计算。感谢@user6910411 指出monotonically_increasing_id() 或类似的东西将返回一个Spark Data Frame 而不是collect() 返回的R data.frame。

这将返回尾部(或接近尾部),最后一个索引值首先打印,并避免收集到 R data.frame:

sdf_with_unique_id(batting_tbl, id = "id") %>% arrange(-id) # Id column for sorting

【讨论】:

    猜你喜欢
    • 2019-03-17
    • 2023-03-23
    • 2022-12-15
    • 2019-11-15
    • 2018-01-20
    • 2017-06-08
    • 2021-02-10
    • 2018-08-21
    • 2019-04-03
    相关资源
    最近更新 更多