我有一个 Dataset[Edge]
其中每条边是从父实体到子实体的边。使用下面的函数,我想从 parent_id
到其子实体。
子实体可以是不同的类型,例如(公司的)高级职员、(公司的)中间人、(公司的)地址、高级职员或中间人
def mapParentIDtoEntity[T](edges: Dataset[Edge], entities: Dataset[T])(implicit tag: TypeTag[T]) = {
edges
.joinWith(
entities,
edges("child_id") ==== entities("id"),
"left"
)
.map(
case (edge: Edge, entity: T) => edge.parent_id -> entity
)
}
我的问题与字型擦除有关。我已经补充了 (implicit tag: TypeTag[T])
确保spark能够编码 T
,但我仍然有以下错误:
abstract type T in type pattern reflect.runtime.universe.TypeTag[T] (the underlying of tag.type)
is unchecked since it is eliminated by erasure
case (edge: Edge, entity: T) => edge.parent_id -> entity
有人能解释一下为什么还会发生这种情况,以及我如何解决它吗?
1条答案
按热度按时间pbgvytdp1#
下面的代码编译(隐式
Encoder[(Int, T)]
而不是TypeTag[T]
)