Spark Java Encoders.bean无法转换为Scala定义的类

Spark Java Encoders.bean无法转换为Scala定义的类,java,scala,apache-spark,Java,Scala,Apache Spark,我有Java代码将JavaRDD转换为Dataset,并将其保存到HDFS: Dataset<User> userDataset = sqlContext.createDataset(userRdd.rdd(), Encoders.bean(User.class)); userDataset.write.json("some_path"); 代码符合并成功运行,文件保存到HDFS,而输出文件中的User类具有空架构: val users = spark.read.json("som

我有Java代码将
JavaRDD
转换为
Dataset
,并将其保存到HDFS:

Dataset<User> userDataset = sqlContext.createDataset(userRdd.rdd(), Encoders.bean(User.class));
userDataset.write.json("some_path");
代码符合并成功运行,文件保存到HDFS,而输出文件中的User类具有空架构:

val users = spark.read.json("some_path")
users.count // 100,000 which is same as "userRdd"
users.printSchema // users: org.apache.spark.sql.DataFrame = []

为什么
Encoders.bean
在这种情况下不工作?

Encoders.bean
不支持Scala case类,
Encoders.product
支持这一点<代码>编码器。产品将
类型标签
作为参数,而初始化
类型标签
在Java中是不可能的。我创建了一个Scala对象来提供
TypeTag

import scala.reflect.runtime.universe._

object MyTypeTags {
  val UserTypeTag: TypeTag[User] = typeTag[User]
}
然后在Java代码中:
Dataset userDataset=sqlContext.createDataset(userRdd.rdd(),Encoders.product(MyTypeTags.UserTypeTag())

import scala.reflect.runtime.universe._

object MyTypeTags {
  val UserTypeTag: TypeTag[User] = typeTag[User]
}