使用Scala / Spark提取Teradata表后出现NullPointerException
发布时间:2020-12-16 08:53:12 所属栏目:安全 来源:网络整理
导读:我需要从Teradata(只读访问)中提取一个表到 Scala(2.11)/ Spark(2.1.0). 我正在构建一个可以成功加载的数据框 val df = spark.read.format("jdbc").options(options).load() 但是df.show给了我一个NullPointerException: java.lang.NullPointerExceptionat
我需要从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的原因是数据集包含(nullable = false)列的空值(看起来Teradata给了我错误的信息).实际上,如果我删除有问题的列,我可以实现df.show. 所以,我尝试指定一个新架构,所有列都设置为(nullable = true): val new_schema = StructType(df.schema.map { case StructField(n,d,nu,m) => StructField(n,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. 关于如何解决这个问题的任何想法? 解决方法
我认为这是在teradata最新版本罐子中解决的,经过所有研究后我将teradata jar(terajdbc4.jar和tdgssconfig.jar)版本更新为16.20.00.04并将teradata网址更改为
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/connectivity/jdbc/reference/current/jdbcug_chapter_2.html#2403_2403ch022113 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- Angular Material 教程之布局篇 (四) : 子元素对齐
- Angular 7上的虚拟滚动 – 默认情况下高度为零
- angularjs – 如何使用量角器检查元素是否可见?
- bash – 如何通过变量传递filename以通过awk读取它
- [S3-E439]Angular AMD 快速入门
- scala – SBT:修改类路径中依赖项的顺序
- Symbian学习笔记8 之 初探WebServices API的使用(上)
- angularjs – 如何修改ui.bootstrap.dropdown以将鼠标悬停在
- Bootstrap实现渐变顶部固定自适应导航栏
- 第十一章 命令传参过滤器、命令组合工具:xargs命令