1

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
4

1 回答 1

3

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

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

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

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

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

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

sdf_with_unique_id(batting_tbl, id = "id") %>% arrange(-id) # Id column for sorting
于 2016-12-12T19:22:17.000 回答