用Scala/Spark提取Teradata表之后,NullPoInterException



我需要用scala(2.11)/spark(2.1.0)从teradata(仅读取访问)提取一个表格。我正在构建一个可以成功加载

的数据框架
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列的CC_3值(看起来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.;

我还尝试从上一张数据框架创建一个新的数据框,指定所需的架构:

val new_df = df.sqlContext.createDataFrame(df.rdd, new_schema)

,但是在对数据框架上采取行动时,我仍然有NPE。

关于我如何解决此问题的任何想法?

我认为这是在Teradata最新版本罐中解决的,在所有研究之后,我更新了我的Teradata Jars (terajdbc4.jar和tddgssconfig.jar).00.04并将Teradata URL更改为

teradata.connection.url=jdbc:teradata://hostname.some.com/
TMODE=ANSI,CHARSET=UTF8,TYPE=FASTEXPORT,COLUMN_NAME=ON,MAYBENULL=ON

我添加teradta url属性 column_name = on,maybenull = on

之后,这是在工作的。

现在一切正常。

您可以在此处检查参考文档

https://developer.teradata.com/doc/connectivitivitive/jdbc/referent/current/current/jdbcug_chapter_2.html#2403_2403_2403_2403ch0222113

相关内容

  • 没有找到相关文章

最新更新