Apache spark Row getAs[String]:java.lang.Byte不能强制转换为java.lang.String

Apache spark Row getAs[String]:java.lang.Byte不能强制转换为java.lang.String,java,scala,apache-spark,Java,Scala,Apache Spark,我有一个Spark数据框,看起来像这样: +-----------+-----+ |foo | bar| +-----------+-----+ | 3|10119| | 2| 4305| +-----------+-----+ 它具有以下模式 org.apache.spark.sql.types.StructType=StructType( StructField(foo,ByteType,true), StructField(条形、长型、

我有一个Spark数据框,看起来像这样:

+-----------+-----+
|foo        |  bar|
+-----------+-----+
|          3|10119|
|          2| 4305|
+-----------+-----+
它具有以下模式

org.apache.spark.sql.types.StructType=StructType(
StructField(foo,ByteType,true),
StructField(条形、长型、假)
)
如您所见,列
foo
ByteType

我需要获取
foo
的第一行作为字符串

当我尝试

val fooStr=df.first.getAs[String](0)
我得到一个例外:

java.lang.ClassCastException: java.lang.Byte cannot be cast to java.lang.String
但是,当我使用
toString
时,我可以施放

val myStr=df.first.get(0.toString)
为什么使用
Row.getAs[String]
时会出现强制转换异常,而使用
toString
时却没有错误。使用
toString
有什么缺点吗?

行。getAs[T](i)
定义为

def getAs[T](i:Int):T=get(i).asInstanceOf[T]
asInstanceOf[T]
只是尝试将对象强制转换为所需的类型(请参阅),而不进行任何进一步的转换。如果
get(i)
返回的类型与所需的类型不兼容(如字节和字符串),则抛出ClassCastException

get(0)
的返回值调用
toString
,意味着调用的方式不同。这不是强制转换,而是返回字符串的常规方法调用