apachespark row getas[string]:java.lang.byte不能转换为java.lang.string

nx7onnlm  于 2021-05-29  发布在  Spark
关注(0)|答案(1)|浏览(725)

我有一个sparkDataframe,看起来像这样:

+-----------+-----+
|foo        |  bar|
+-----------+-----+
|          3|10119|
|          2| 4305|
+-----------+-----+

它有以下模式

org.apache.spark.sql.types.StructType = StructType(
    StructField(foo,ByteType,true), 
    StructField(bar,LongType,false)
)

如您所见,该列 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 ?

6qfn3psc

6qfn3psc1#

Row.getAs[T](i) 这里的定义是

def getAs[T](i: Int): T = get(i).asInstanceOf[T]
``` `asInstanceOf[T]` 只是尝试将对象强制转换为所需的类型(请参见此处),而不进行任何进一步的转换。如果返回的类型 `get(i)` 如果所需类型不兼容(如byte和string),则抛出classcastexception。
打电话 `toString` 论收益价值 `get(0)` 但表示调用byte.tostring()。这不是强制转换,而是返回字符串的常规方法调用。

相关问题