【发布时间】:2018-11-08 17:51:21
【问题描述】:
我有两个数据集:Dataset[User] 和 Dataset[Book] 其中 User 和 Book 都是案例类。我像这样加入他们:
val joinDS = ds1.join(ds2, "userid")
如果我尝试对joinDS 中的每个元素使用map,编译器会抱怨缺少编码器:
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],还是别的什么?
【问题讨论】:
-
很确定你不能编码
Unit。
标签: scala apache-spark apache-spark-dataset apache-spark-encoders