2016-11-21 3 views
3

Der Versuch, einen Funken Datenrahmen mit mehreren zusätzlichen Spalten zu erstellen, basierend auf Bedingungen wie dieseWie können neue Spalten basierend auf Bedingungen hinzugefügt werden (ohne JaninoRuntimeException oder OutOfMemoryError gegenüberzustellen)?

df 
    .withColumn("name1", someCondition1) 
    .withColumn("name2", someCondition2) 
    .withColumn("name3", someCondition3) 
    .withColumn("name4", someCondition4) 
    .withColumn("name5", someCondition5) 
    .withColumn("name6", someCondition6) 
    .withColumn("name7", someCondition7) 

Ich bin konfrontiert mit folgender Ausnahme bei mehr als 6 .withColumn Klauseln hinzugefügt

org.codehaus.janino.JaninoRuntimeException: Code of method "()V" of class "org.apache.spark.sql.catalyst.expressions.GeneratedClass$GeneratedIterator" grows beyond 64 KB 

Dieses Problem wurde auch an anderer Stelle berichtet, zB

Gibt es eine Eigenschaft in Funken, wo ich die Größe konfigurieren können?

bearbeiten

Wenn noch mehr Spalten erstellt werden, z. rund 20 erhalte ich nicht mehr die vorgenannte Ausnahme, sondern die folgende Fehlermeldung nach 5 Minuten Warte erhalten:

java.lang.OutOfMemoryError: GC overhead limit exceeded 

Was ich will ist eine Rechtschreibung/Fehlerkorrektur durchzuführen. einige einfache Fälle könnten leicht über eine Karte & Ersatz in einem UDF behandelt werden. Dennoch bleiben mehrere andere Fälle mit mehreren verketteten Zuständen übrig.

Ich werde auch dort folgen: https://issues.apache.org/jira/browse/SPARK-18532

Ein minimales reproduzierbares Beispiel finden Sie hier https://gist.github.com/geoHeil/86e5401fc57351c70fd49047c88cea05

Antwort

2

Dieser Fehler wird durch WholeStageCodegen und JVM Problem verursacht.

Schnelle Antwort: Nein, Sie können das Limit nicht ändern. Bitte schauen Sie sich this Frage an, 64KB ist die maximale Methodengröße in JVM.

Wir müssen auf eine Problemumgehung in Spark warten, derzeit gibt es nichts, was Sie in Systemparametern ändern können

Verwandte Themen