2017-08-29 1 views
8

Ich muss eine Tabelle von Teradata (Lesezugriff) auf Parkett mit Scala (2.11)/Spark (2.1.0) extrahieren. Ich baue einen Datenrahmen, die ichNullPointerException nach dem Extrahieren einer Teradata Tabelle mit Scala/Spark

erfolgreich laden
val df = spark.read.format("jdbc").options(options).load() 

Aber df.show gibt mir eine Nullpointer:

java.lang.NullPointerException 
at org.apache.spark.sql.catalyst.expressions.codegen.UnsafeRowWriter.write(UnsafeRowWriter.java:210) 

Ich habe ein df.printSchema und ich fand heraus, dass der Grund für diese NPE ist, dass die Datensatz enthält null Werte für (nullable = false) Spalten (es sieht aus wie Teradata gibt mir falsche Informationen). In der Tat kann ich eine df.show erreichen, wenn ich die problematischen Spalten fallen lasse.

Also habe ich versucht, ein neues Schema mit allen Spalten (nullable = true) gesetzt Angabe:

val new_schema = StructType(df.schema.map { 
    case StructField(n,d,nu,m) => StructField(n,d,true,m) 
}) 

val new_df = spark.read.format("jdbc").schema(new_schema).options(options).load() 

Aber dann bekam ich:

org.apache.spark.sql.AnalysisException: JDBC does not allow user-specified schemas.; 

Ich habe auch versucht, einen neuen Datenrahmen von der vorherigen zu erstellen , das gewünschte Schema festgelegt wird:

val new_df = df.sqlContext.createDataFrame(df.rdd, new_schema) 

Aber ich habe immer noch eine NPE wenn ac Einnahme auf dem Datenrahmen.

Irgendeine Idee, wie ich das beheben könnte?

+0

Dieses Problem verwandt zu sein scheint, aber noch ist keine Lösung zur Verfügung gestellt: https://community.teradata.com/t5/Connectivity/Teradata- JDBC-Driver-returns-the-wrong-schema-spalte-nullbarkeit/td-p/40628 – RaphDG

+0

Hey @RaphDG haben Sie eine Lösung dafür gefunden. Jetzt laufe ich mit diesem Problem. – Lakshman

+0

@Lakshman verwenden Sie auch Version 2.1.0? – stefanobaghino

Antwort

1

Ich denke, das in Teradata neueste Version Gläser behoben ist, schließlich die Forschung, die ich meine teradata Gläser aktualisiert (terajdbc4.jar und tdgssconfig.jar) Version 16.20.00.04 und änderte die teradata URL

teradata.connection.url=jdbc:teradata://hostname.some.com/ 
TMODE=ANSI,CHARSET=UTF8,TYPE=FASTEXPORT,COLUMN_NAME=ON,MAYBENULL=ON 

dies gearbeitet wird, nachdem ich teradta url Eigenschaften COLUMN_NAME = ON, MAYBENULL = ON

Jetzt ist alles funktioniert gut aufgenommen.

können Sie das Referenzdokument hier überprüfen

https://developer.teradata.com/doc/connectivity/jdbc/reference/current/jdbcug_chapter_2.html#2403_2403ch022113

Verwandte Themen