можешь выложить рабочий код ..

ужно извлечь таблицу из 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, когда предпринимал действия с кадром данных.

Есть идеи, как я могу это исправить?

Ответы на вопрос(0)

Ваш ответ на вопрос