【发布时间】:2020-05-20 12:19:20
【问题描述】:
我有一个数据集,我希望将其转换为类型数据集,其中类型是具有 Option 多个参数的案例类。例如,我使用 spark shell 创建了一个案例类、一个编码器和(原始)数据集:
case class Analogue(id: Long, t1: Option[Double] = None, t2: Option[Double] = None)
val df = Seq((1, 34.0), (2,3.4)).toDF("id", "t1")
implicit val analogueChannelEncoder: Encoder[Analogue] = Encoders.product[Analogue]
我想从df 创建一个Dataset<Analogue>,所以我尝试:
df.as(analogueChannelEncoder)
但这会导致错误:
org.apache.spark.sql.AnalysisException: cannot resolve '`t2`' given input columns: [id, t1];
查看df 和analogueChannelEncoder 的架构,区别很明显:
scala> df.schema
res3: org.apache.spark.sql.types.StructType = StructType(StructField(id,IntegerType,false), StructField(t1,DoubleType,false))
scala> analogueChannelEncoder.schema
res4: org.apache.spark.sql.types.StructType = StructType(StructField(id,LongType,false), StructField(t1,DoubleType,true), StructField(t2,DoubleType,true))
我已经看到 this 的答案,但这对我不起作用,因为我的 Dataset 已组装并且不是来自数据源的直接加载
如何将未键入的Dataset<Row> 转换为Dataset<Analogue>?
【问题讨论】:
标签: scala apache-spark