Potrzebuję wyodrębnić tabelę z Teradata (dostęp tylko do odczytu) do parkietu za pomocą Scala (2.11)/Spark (2.1.0). Buduję dataframe że mogę załadować pomyślnieWyjątek NullPointerException po wyodrębnieniu tabeli Teradata za pomocą Scala/Spark
val df = spark.read.format("jdbc").options(options).load()
Ale df.show
daje mi NullPointerException:
java.lang.NullPointerException
at org.apache.spark.sql.catalyst.expressions.codegen.UnsafeRowWriter.write(UnsafeRowWriter.java:210)
zrobiłem df.printSchema
i okazało się, że powodem tego jest to, że NPE dataset zawiera wartości null
dla kolumn (nullable = false)
(wygląda na to, że Teradata podaje mi błędne informacje). Rzeczywiście, jeśli mogę upuścić problematyczne kolumny, mogę uzyskać df.show
.
Więc starałem określając nowy schemat z wszystkich kolumn ustawionych na (nullable = true)
:
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()
Ale potem dostałam:
org.apache.spark.sql.AnalysisException: JDBC does not allow user-specified schemas.;
Próbowałem też utworzyć nową Dataframe od poprzedniego , określając pożądany schemat:
val new_df = df.sqlContext.createDataFrame(df.rdd, new_schema)
Ale nadal mam NPE przy podejmowaniu ac na ramie danych.
Masz pomysł, jak to naprawić?
Kwestia ta wydaje się być związane, ale nadal nie jest rozwiązanie: https://community.teradata.com/t5/Connectivity/Teradata- JDBC-Driver-zwraca-zły-schemat-kolumna-nullability/td-p/40628 – RaphDG
Hej @ RaphDG znalazłeś jakieś rozwiązanie. Teraz używam tego problemu. – Lakshman
@Lakshman używasz także wersji 2.1.0? – stefanobaghino