java - StringType 问题:线程“main”scala.MatchError 中的异常:org.apache.spark.sql.types.StringType@
问题描述
@Override
public Option<DataType> getCatalystType(int sqlType, String typeName, int size, MetadataBuilder md) {
switch (sqlType) {
case java.sql.Types.JAVA_OBJECT:
switch (typeName) {
case "map(varchar(2147483647),varchar(2147483647))":
return Option.apply(DataTypes.createMapType(new StringType(), new StringType()));
}
break;
}
return super.getCatalystType(sqlType, typeName, size, md);
}
代码用于在返回时支持复杂的数据类型JAVA_OBJECT
。同样的代码,我用 Scala 编写的,运行良好。但是当在 Java 中使用上面的代码时,它给出了:
Exception in thread "main" scala.MatchError: org.apache.spark.sql.types.StringType@582b14e2 (of class org.apache.spark.sql.types.StringType).
Scala 代码供参考:
override def getCatalystType(sqlType: Int, typeName: String, size: Int, md: MetadataBuilder): Option[DataType] = sqlType match {
case java.sql.Types.JAVA_OBJECT =>
typeName match {
case "map(varchar(2147483647),varchar(2147483647))" => Option(DataTypes.createMapType(StringType, StringType))
case "BIT" => Option(BooleanType)
case _ => None
}
case _ => None
}
解决方案
改用单例DataTypes.StringType
(推荐):
...
...(DataTypes.createMapType(DataTypes.StringType, DataTypes.StringType))
表示字符串值的数据类型。请使用单例 DataTypes.StringType。
推荐阅读
- javascript - 下载不适用于浏览器中的 bash 脚本
- c# - 如何在 Nunit 中使用 Assert 检查两个列表的项目是否相等
- node.js - nodejs couchbase安装失败
- sql - 在 SQL 中创建循环脚本
- python - 如何从数据框中创建多个附加列并添加到同一个数据框中
- java - 如何在 switch case 中使用多个 postDelayed 处理程序来显示图片
- flutter - Flutter - 将 orElse 添加到 FirstWhere
- angular - 如何获取已创建记录的 ID?
- java - 如何从 MethodArgumentNotValidException 类中提取字段名称和错误消息?
- c# - 如何在单元测试中验证 EF Core DBContext 配置