【发布时间】:2020-09-01 16:48:25
【问题描述】:
我们在项目中使用spark 和Scala。
我们正在使用自定义encoders 来创建spark datasets。
我们的数据集架构类型如下:
(String, util.ArrayList[MyObject])
当我们执行 df.printSchema 时,我们得到以下信息:
root
|-- key: string (nullable = true)
|-- listOfMyObject: array (nullable = true)
| |-- element: binary (containsNull = true)
MyObject 是如下的 scala 案例类:
case class MyObject(key: String, dataList: java.util.ArrayList[MyObject2])
当我们在这个数据框上应用地图函数时,
df.map((row) => {
val key = row.get(0)
val values = row.get(1)
})
在运行时,行包含以下架构:
StructField(key,StringType,true)
StructField(myObject,ArrayType(BinaryType,true),true)
我们能够检索到String 值,但是在尝试检索util.ArrayList[MyObject] 时,我们得到了scala.collection.mutable.WrappedArray$ofRef。
我们使用ref.getClass 方法得到了这个。
有什么方法可以解决这个问题吗?
谢谢
阿努杰
【问题讨论】:
-
能否提供更多代码?
-
添加代码供参考
-
请像这样
val values: java.util.ArrayList[MyObject] = row.get(1)投射它并让我知道结果 -
val 值:java.util.ArrayList[MyObject] = row.getAs[java.util.ArrayList[MyObject]](1) 由于阶段失败而中止作业:阶段 81.0 中的任务 123 失败 1次,最近的失败:在阶段 81.0 中丢失任务 123.0(TID 411,本地主机,执行程序驱动程序):java.lang.ClassCastException:scala.collection.mutable.WrappedArray$ofRef 无法转换为 java.util.ArrayList
-
您需要提供一个可重现的示例。不清楚您遵循了哪些步骤以及您的代码是什么样的
标签: scala apache-spark apache-spark-sql scala-collections