Apache Spark löst NullPointerException aus, wenn ein fehlendes Feature gefunden wird

8

Ich habe ein bizarres Problem mit PySpark beim Indexieren der Spalte von Strings in Features. Hier ist meine tmp.csv-Datei:

%Vor%

wo ich einen fehlenden Wert für 'x0' habe. Zuerst lese ich Funktionen aus der CSV-Datei mit Hilfe von pyspark_csv in DataFrame: Ссылка Dann indizieren x0 mit StringIndexer:

%Vor%

beim Aufruf von '' ind.collect () '' Spark löst java.lang.NullPointerException aus. Alles funktioniert gut für den vollständigen Datensatz, z. B. für 'x1'.

Hat jemand eine Ahnung, was das verursacht und wie man es repariert?

Vielen Dank im Voraus!

Sergey

Aktualisierung:

Ich benutze Spark 1.5.1. Der genaue Fehler:

%Vor%

Ich habe versucht, denselben DataFrame zu erstellen, ohne die CSV-Datei zu lesen,

%Vor%

und es gibt denselben Fehler. Ein bisschen anderes Beispiel funktioniert gut,

%Vor%

Update 2:

Ich habe gerade das gleiche Problem in Scala entdeckt, also denke ich, es ist Spark Bug nicht nur PySpark. Insbesondere Datenrahmen

%Vor%

löst java.lang.NullPointerException beim Indexieren der 'x0'-Funktion aus. Außerdem beim Indexieren von 'x0' im folgenden Datenrahmen

%Vor%

Ich habe 'java.lang.UnsupportedOperationException: Schema für den Typ Any wird nicht unterstützt', was durch den fehlenden 'num' Wert im 5. Vektor verursacht wird. Wenn man es durch eine Zahl ersetzt, funktioniert alles gut, auch wenn im ersten Vektor ein Wert fehlt.

Ich habe auch ältere Versionen von Spark (1.4.1) ausprobiert, und das Ergebnis ist dasselbe.

    
serge_k 06.11.2015, 20:02
quelle

2 Antworten

6

Es sieht so aus, als ob das Modul, das Sie verwenden, leere Strings in Nullen umwandelt und es zu einem gewissen Zeitpunkt mit Downstream-Verarbeitung zu tun hat. Auf den ersten Blick sieht wie ein PySpark-Bug aus .

Wie man es repariert? Eine einfache Problemumgehung besteht darin, Nullen vor der Indizierung zu löschen:

%Vor%

oder Nullen durch einen Platzhalter ersetzen:

%Vor%

Sie können auch spark-csv verwenden. Es ist effizient, getestet und wandelt als Bonus keine leeren Zeichenfolgen in nulls um.

%Vor%     
zero323 07.11.2015, 04:41
quelle
0

Nun, zur Zeit ist die einzige Lösung, NAs wie @ zero323 loszuwerden oder Spark DataFrame mit der Methode toPandas () nach Pandas DataFrame zu konvertieren und die Daten mit sklearn Imputer oder einem beliebigen anderen geeigneten Printer, zB Imputieren Sie kategoriale fehlende Werte in scikit-learn und konvertieren Sie dann den Pandas Dataframe zurück in Spark DataFrame und arbeite damit. Trotzdem bleibt das Problem bestehen, ich werde versuchen, einen Fehlerbericht zu senden. Ich bin relativ neu in Spark, also besteht die Chance, dass mir etwas fehlt.

    
serge_k 07.11.2015 13:01
quelle