можешь выложить рабочий код ..
ужно извлечь таблицу из Teradata (доступ только для чтения) для паркета с Scala (2.11) / Spark (2.1.0). Я строю фрейм данных, который я могу успешно загрузить
val df = spark.read.format("jdbc").options(options).load()
Ноdf.show
дает мне исключение NullPointerException:
java.lang.NullPointerException
at org.apache.spark.sql.catalyst.expressions.codegen.UnsafeRowWriter.write(UnsafeRowWriter.java:210)
Я сделалdf.printSchema
и я узнал, что причина этого NPE состоит в том, что набор данных содержитnull
значения для(nullable = false)
столбцы (похоже, что Teradata дает мне неверную информацию). Действительно, я могу достичьdf.show
если я опущу проблемные столбцы.
Итак, я попытался указать новую схему со всеми столбцами, установленными в(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()
Но потом я получил:
org.apache.spark.sql.AnalysisException: JDBC does not allow user-specified schemas.;
Я также попытался создать новый Dataframe из предыдущего, указав требуемую схему:
val new_df = df.sqlContext.createDataFrame(df.rdd, new_schema)
Но я все еще получил NPE, когда предпринимал действия с кадром данных.
Есть идеи, как я могу это исправить?