Последние строки из фрейма данных 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