Последние строки из фрейма данных Spark (с использованием sparklyr & dplyr)

Хотел бы напечатать последние 50 строк приведенного ниже кадра данных, используя что-то вроде tail function ниже по диапазону строк, используя sparklyr, без arrange или же collect - некоторые из моих кадров большие и не имеют последовательных столбцов.

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

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 %>% head(., n = 50) не требует сбора данных в R data.frame и тратит меньше времени на вычисления. Спасибо @user6910411 за указание monotonically_increasing_id() или что-то подобное вернет фрейм данных Spark вместо R data.frame, возвращаемого collect(),

Это возвращает хвост (или близко к нему), с последними напечатанными последними значениями индекса, и избегает сбора в R data.frame:

sdf_with_unique_id(batting_tbl, id = "id") %>% arrange(-id) # Id column for sorting
Другие вопросы по тегам