2016-12-12 15 views
1

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

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 
+0

Почему бы не назвать вам окончательный отсортированный data.frame перед вызовом хвост? 'tail (namedData, n = 50)' – CCurtis

+0

Ваше предложение будет работать в сортировке по индексу, а затем с головой в Spark DataFrame. – eyeOfTheStorm

ответ

2

Вот одно решение (возвращает несортированный хвост):

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 Data Frame вместо R data.frame, возвращаемого collect().

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

sdf_with_unique_id(batting_tbl, id = "id") %>% arrange(-id) # Id column for sorting 
Смежные вопросы