2016-12-12 4 views
1

Möchten die letzten 50 Zeilen des folgenden Datenrahmens mit etwas wie dem tail function unten durch Zeilenbereich mit Sparklyr, ohne arrange oder collect - einige meiner Frames sind groß und haben keine sequentiellen Spalten.Letzte Zeilen von einem Spark DataFrame (mit 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

Warum vor Rufname Sie nicht endgültig sortiert data.frame Schwanz? 'tail (namedData, n = 50)' – CCurtis

+0

Ihr Vorschlag funktioniert bei der Sortierung nach Index und dann auf einem Spark DataFrame. – eyeOfTheStorm

Antwort

2

Hier ist eine Lösung (kehrt unsortiert Schwanz):

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

Hier ist eine zweite Lösung (Filter-Index):

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

** Hinweis: Beide oben tbl_df erfordern, während batting_tbl %>% head(., n = 50) erfordert keine Sammlung zu einem R data.frame, und neigt dazu, weniger Zeit für die Berechnung zu nehmen. Dank @ user6910411 zum Hinweis monotonically_increasing_id() oder etwas ähnliches wird ein Spark Data Frame anstelle eines R data.frame von collect() zurückgegeben.

Dies gibt den Schwanz (oder nahe daran), mit den letzten ersten gedruckten Indexwerte und Sammlung zu einem R data.frame vermeidet:

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