Lineare Regression in R Mapreduce (RHadoop)

7

Ich bin neu bei RHadoop und auch bei RMR ... Ich musste einen Mapreduce-Job in R Mapreduce schreiben. Ich habe versucht zu schreiben, aber während der Ausführung gibt es einen Fehler. Versuchen Sie, die Datei von hdfs zu lesen

Error:

Error in mr(map = map, reduce = reduce, combine = combine, vectorized.reduce,  : 
   hadoop streaming failed with error code 1

Code:

Sys.setenv(HADOOP_HOME="/opt/cloudera/parcels/CDH-4.7.0-1.cdh4.7.0.p0.40/lib/hadoop")
Sys.setenv(HADOOP_CMD="/opt/cloudera/parcels/CDH-4.7.0-1.cdh4.7.0.p0.40/bin/hadoop")

Sys.setenv(HADOOP_STREAMING="/opt/cloudera/parcels/CDH-4.7.0-1.cdh4.7.0.p0.40/lib/hadoop-0.20-mapreduce/contrib/streaming/hadoop-streaming-2.0.0-mr1-cdh4.7.0.jar")
library(rmr2)
library(rhdfs)
hdfs.init()
day_file = hdfs.file("/hdfs/bikes_LR/day.csv","r")
day_read = hdfs.read(day_file)
c = rawToChar(day_read)

XtX =
  values(from.dfs(
    mapreduce(
      input = "/hdfs/bikes_LR/day.csv",
      map=
        function(.,Xi){
         yi =c[Xi[,1],]
         Xi = Xi[,-1]
         keyval(1,list(t(Xi)%*%Xi))
       },
  reduce = function(k,v )
  {
    vals =as.numeric(v)
    keyval(k,sum(vals))
  } ,
  combine = TRUE)))[[1]]

XtY =
 values(from.dfs(
    mapreduce(
     input = "/hdfs/bikes_LR/day.csv",
     map=
       function(.,Xi){
         yi =c[Xi[,1],]
         Xi = Xi[,-1]
        keyval(1,list(t(Xi)%*%yi))
       },
     reduce = TRUE ,
     combine = TRUE)))[[1]]
solve(XtX,XtY)



Input:
------------

instant,dteday,season,yr,mnth,holiday,weekday,workingday,weathersit,temp,atemp,hum,windspeed,casual,registered,cnt
1,2011-01-01,1,0,1,0,6,0,2,0.344167,0.363625,0.805833,0.160446,331,654,985
2,2011-01-02,1,0,1,0,0,0,2,0.363478,0.353739,0.696087,0.248539,131,670,801
3,2011-01-03,1,0,1,0,1,1,1,0.196364,0.189405,0.437273,0.248309,120,1229,1349
4,2011-01-04,1,0,1,0,2,1,1,0.2,0.212122,0.590435,0.160296,108,1454,1562
5,2011-01-05,1,0,1,0,3,1,1,0.226957,0.22927,0.436957,0.1869,82,1518,1600
6,2011-01-06,1,0,1,0,4,1,1,0.204348,0.233209,0.518261,0.0895652,88,1518,1606
7,2011-01-07,1,0,1,0,5,1,2,0.196522,0.208839,0.498696,0.168726,148,1362,1510
8,2011-01-08,1,0,1,0,6,0,2,0.165,0.162254,0.535833,0.266804,68,891,959
9,2011-01-09,1,0,1,0,0,0,1,0.138333,0.116175,0.434167,0.36195,54,768,822
10,2011-01-10,1,0,1,0,1,1,1,0.150833,0.150888,0.482917,0.223267,41,1280,1321



 Please Suggest me any mistakes.
user3782364
quelle
1
Sie müssen die Protokollausgabe Ihres R-Skripts finden, die auf den Fehler hinweist. "Hadoop-Streaming mit Fehlercode 1 fehlgeschlagen" bedeutet nur "das Skript ist aus irgendeinem Grund fehlgeschlagen"
Sean Owen
1
Manchmal muss der Ordner, in den Sie schreiben, vor dem Schreiben gelöscht werden (falls vorhanden). Schau dir das an.
Adesantos
Vielen Dank für Ihre Antwort ... aber ich habe alle Möglichkeiten überprüft, die Sie erwähnt haben ... Ich bezweifle, dass es ein Problem mit dem Code selbst gibt ... kann jemand bitte korrigieren ...
user3782364
Ist das ein einzelner Maschinencluster? Können Sie das stderr-Protokoll bereitstellen?
Hack-R

Antworten:

1

Ich schlage vor, Bibliotheken für maschinelles Lernen mit bereits funktionaler linearer Regression Spark MLlib oder hivemall zu verwenden .

Marcin Kosiński
quelle
1
Diese beziehen sich nicht auf R oder MapReduce, was hier anscheinend Anforderungen sind.
Sean Owen
Auf Funken Sie können in Python schreiben. Verwenden Sie die RPy-Bibliothek zum Integrieren von R an Python.
Marcin Kosiński