我有两个数据集:Dataset[User]
和Dataset[Book]
,其中User
和Book
都是案例类。我像这样加入他们:
val joinDS = ds1.join(ds2, "userid")
如果我尝试map
中的每个元素joinDS
,则编译器会抱怨缺少编码器:
not enough arguments for method map: (implicit evidence$46: org.apache.spark.sql.Encoder[Unit])org.apache.spark.sql.Dataset[Unit].
Unspecified value parameter evidence$46.
Unable to find encoder for type stored in a Dataset.
但是,如果我使用foreach
而不是map
,则不会发生相同的错误。为什么foreach
也不需要编码器?我已经从spark会话中导入了所有隐式对象,因此,当数据集是将包含案例类的两个数据集相连接的结果时,为什么map
根本需要编码器?另外,从该联接中可以获得什么类型的数据集?是Dataset[Row]
还是其他?