scala 报错:java.lang.UnsupportedOperationException: fieldIndex on a Row without schema is undefined.

当尝试访问无模式的Row对象字段时,Scala中可能会出现`java.lang.UnsupportedOperationException: fieldIndex on a Row without schema is undefined.`的错误。该错误源于在创建Row对象时未指定schema。解决方案是确保在创建Row对象时提供相应的schema,以避免调用未实现的fieldIndex方法导致异常。
Scala 报错:java.lang.UnsupportedOperationException: fieldIndex on a Row without schema is undefined.

报错代码:

 val row = Row("1", "2", "3")
 row.getAs[String]("a")

错误原因:创建row的时候没有给定fieldIndex
查看了一下Row的源码,创建row对象的时候,实际上是调用了new GenericRow()方法,创建了个GenericRow对象,然后这个对象继承了Row这个特质,在这个名为Row的这个特质里面:
在这里插入图片描述
有一个getAs的方法,这个方法就是我在上文中调用的方法(然后无情的报了错误,残忍!!!),这个方法里面调用了一个fieldIndex()方法,紧接着这下面就有一个fieldIndex的方法,只是单纯的抛出了一个异常,没有实现具体的相关内容,所以这就是为什么创建了一个row之后就报错的原因了。

之前提到了,创建一个新的row对象的时候实际上是创建了一个GenericRow的对象,然后在这个对象的定义代码的下方不远处可以看到一个这样的对象:

在这里插入图片描述
就是GenericRowWithSchema这个对象,它继承了GenericRow对象。同时重写了fieldIndex()方法,所以代码要改成这个样子:

    val structType: StructType = new StructType(
      Array(
        StructField("a", IntegerType, true),
        StructField("b", IntegerType, true),
        StructField("c", IntegerType, true)
      )
    )
val row: GenericRowWithSchema = new GenericRowWithSchema(Array("1", "2", "3"), structType)
row.getAs[String](“a”)

嗯,这样的话,因为fieldIndex()方法已经被实现了,所以,调用getAs[T]()这个方法也就可以正常使用了!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值