Tôi cần trích xuất một bảng từ Teradata (truy cập chỉ đọc) sang sàn gỗ với Scala (2.11)/Spark (2.1.0). Tôi đang xây dựng một dataframe mà tôi có thể tải thành côngNullPointerException sau khi trích xuất một bảng Teradata với Scala/Spark
val df = spark.read.format("jdbc").options(options).load()
Nhưng df.show
mang lại cho tôi một NullPointerException:
java.lang.NullPointerException
at org.apache.spark.sql.catalyst.expressions.codegen.UnsafeRowWriter.write(UnsafeRowWriter.java:210)
Tôi đã làm một df.printSchema
và tôi phát hiện ra rằng lý do cho NPE này là tập dữ liệu chứa các giá trị null
cho các cột (nullable = false)
(có vẻ như Teradata đang cung cấp cho tôi thông tin sai). Thật vậy, tôi có thể đạt được một df.show
nếu tôi thả các cột có vấn đề.
Vì vậy, tôi đã cố gắng xác định một schema mới với tất cả các cột thiết lập để (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()
Nhưng sau đó tôi nhận:
org.apache.spark.sql.AnalysisException: JDBC does not allow user-specified schemas.;
Tôi cũng đã cố gắng để tạo ra một Dataframe mới từ trước đó , chỉ định giản đồ mong muốn:
val new_df = df.sqlContext.createDataFrame(df.rdd, new_schema)
Nhưng tôi vẫn nhận được NPE khi chụp ac tion trên dataframe.
Bất kỳ ý tưởng nào về cách khắc phục sự cố này?
Vấn đề này dường như có liên quan, nhưng vẫn còn, không có giải pháp được cung cấp: https://community.teradata.com/t5/Connectivity/Teradata- JDBC-Trình điều khiển-trả về-the-sai-sơ đồ-cột-nullability/td-p/40628 – RaphDG
Hey @RaphDG bạn đã tìm thấy bất kỳ giải pháp cho việc này. Bây giờ tôi đang chạy với vấn đề này. – Lakshman
@Lakshman bạn có đang sử dụng phiên bản 2.1.0 không? – stefanobaghino