【问题标题】:StringType issue: Exception in thread "main" scala.MatchError: org.apache.spark.sql.types.StringType@StringType 问题:线程“main”scala.MatchError 中的异常:org.apache.spark.sql.types.StringType@
【发布时间】:2021-05-01 23:44:21
【问题描述】:
@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
  }

【问题讨论】:

    标签: java scala apache-spark


    【解决方案1】:

    使用单例 DataTypes.StringType 代替 (as recommended):

    ...
    ...(DataTypes.createMapType(DataTypes.StringType, DataTypes.StringType))          
    

    表示字符串值的数据类型。请使用单例 DataTypes.StringType.

    【讨论】:

    • 拯救了我的一天!!作为一个 Spark 菜鸟,我不可能这么直观地想到这一点。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-05
    • 2018-09-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多