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 ladenval 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?
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
Hey @RaphDG haben Sie eine Lösung dafür gefunden. Jetzt laufe ich mit diesem Problem. – Lakshman
@Lakshman verwenden Sie auch Version 2.1.0? – stefanobaghino