Учитывая case class
:
case class ScoringSummary(MatchMethod: String="",
TP: Double=0,
FP: Double=0,
Precision: Double=0,
Recall: Double=0,
F1: Double=0)
Мы записываем сводные записи в виде:
summaryDf.write.parquet(path)
Позже мы (попытка) считываем файл паркета в новый кадр данных:
implicit val generalRowEncoder: Encoder[ScoringSummary] =
org.apache.spark.sql.Encoders.kryo[ScoringSummary]
val summaryDf = spark.read.parquet(path).as[ScoringSummary]
Но это не удается - по какой-то причине spark
считает, что содержимое данных было Tuple1
вместо ScoringSummary
:
Try to map struct<MatchMethod:string,TP:double,FP:double,Precision:double,
Recall:double,F1:double> to Tuple1,
but failed as the number of fields does not line up.;
at org.apache.spark.sql.catalyst.analysis.Analyzer$ResolveDeserializer$
.org$apache$spark$sql$catalyst$analysis$Analyzer$
ResolveDeserializer$$fail(Analyzer.scala:2168)
Какой шаг / настройка отсутствует/ неверный для правильного перевода?