2016-07-13 38 views
0

Ich benutze SparkR auf R Studio Server. Nach dem Erstellen eines sqlContext habe ich einige Tabellen in sparkR bearbeitet und bin mit der finalen Tabelle von 2,2 Millionen Datensätzen geblieben, die ich in einen R data.frame umwandeln wollte, um Regressionsmodelle mit R-Funktionen zu entwickeln. Der Code "as.data.frame (finaltable)" wird jedoch aufgrund von Speicherproblemen auch nach 2 Stunden nie ausgeführt.Konvertierung zu R data.frame von SparkR Dataframe ist nie für 2 Millionen Datensätze abgeschlossen

library(SparkR) 
sc <- sparkR.init(master="yarn-client", sparkEnvir = list(spark.yarn.keytab="/home/teja_kolli/teja_kolli.keytab" , spark.yarn.principal="[email protected]",spark.driver.memory="4g")) 
sqlContext <- sparkRSQL.init(sc) 

customer_activity_bookings <- parquetFile(sqlContext, "s3a:/parquet/customer_activity_bookings/.parquet") 

registerTempTable(customer_activity_bookings, "customer_activity_bookings") 

ich in ähnlicher Weise einige 4 Tabellen und machen eine weitere Verarbeitung an die untenstehende Tabelle T3 zu gelangen, die

t3 <- sql(sqlContext, 
"select a.visitor_id,a.timestamp,a.sort_number,a.property_id,a.brand_name,a.distance_value,a.guest_recommends,a.guest_reviews,a.min_avg_nightly_before_tax,a.rating_value, 
a.relevance,a.relevance_distance_index,a.relevance_rate_index,a.relevance_rating_index,a.hotel_selection_type,a.pid,c.p_key,c.sum_key 
from t1 a left outer join t2 c on a.visitor_id = c.visitor_id and a.timestamp = c.timestamp where c.p_key=1 and sum_key=1") 

**modeldata1<-as.data.frame(t3)** 

Die obige as.data.frame rund 2,2 Millionen Datensätze hat so lange dauert (zu laufen "Ich habe keinen Java Heap Space Fehler mehr im Speicher". In der sparkR.init Verbindung ging ich bis zu (memory = "4g") und kann aufgrund von Speicherbeschränkungen nicht weiter gehen.)

Gibt es irgendwelche Arbeiten um zu bringe diese finale Tabelle von 2,2 Millionen Datensätzen in R, damit ich R-Funktionen nutzen kann, librar ies und Befehle?

Antwort

0

Die Konvertierung eines funkeR-Datenrahmens in einen lokalen R-Datenrahmen ist keine gute Idee, da Sie alle verteilten Daten an einen Punkt übertragen, was zu viel Netzwerkverkehr führt und den Vorteil der verteilten Daten verpasst Forschung mehr über die sparkR Paket wahrscheinlich gibt es einen Befehl für das, was Sie

https://spark.apache.org/docs/latest/api/R/

berechnen wollen