Spark DataFrame 的最后一行(使用 sparklyr & dplyr)

Last Rows from a Spark DataFrame (using sparklyr & dplyr)

想使用 sparklyr 按行范围使用下面的 tail function 之类的东西打印下面数据框的最后 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

这是一种解决方案(returns 未排序的尾巴):

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 %>% head(., n = 50) 不需要 collection 到 R data.frame,并且往往花费更少的时间计算。感谢@user6910411 指出 monotonically_increasing_id() 或类似的东西将 return Spark 数据帧而不是 R data.frame returned by collect().

这 return 尾部(或接近尾部),首先打印最后的索引值,并避免 collection 到 R data.frame:

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