[英]Store POJOs to a Spark Dataset
我正在将Zeppelin连接到我的 rest 网络服务,该服务通过OpenAPI返回城市:
import java.util.Map;
import fr.ecoemploi.application.etude.swagger.model.Commune;
import fr.ecoemploi.application.etude.swagger.api.CogControllerApi;
var serviceCodeOfficielGeographique: CogControllerApi = new CogControllerApi();
var communes: Map[String, Commune] =
serviceCodeOfficielGeographique.obtenirCommunesUsingGET(2022);
它返回令人满意的结果:
communes: java.util.Map[String,fr.ecoemploi.application.etude.swagger.model.Commune] =
{62001=class Commune {
arrondissement: 627
codeCanton: 6217
codeCommune: 62001
codeCommuneParente: null
codeDepartement: 62
codeEPCI: 246200364
codeRegion: 32
collectiviteOutremer: false
nomCommune: Ablain-Saint-Nazaire
nomMajuscules: ABLAIN SAINT NAZAIRE
population: null
sirenCommune: 216200014
...
我想将城市(这个 map 的值,我将使用communes.values()
捕获)存储到Dataset[Commune]
中。
但我想知道如何做到这一点。
我试过:
import org.apache.spark.sql._
var datasetCommunes = spark.createDataset(communes, Encoders[Commune]);
在Zeppelin下,但收到消息:
<console>:96: error: object Encoders does not take type parameters.
var datasetCommunes = spark.createDataset(communes, Encoders[Commune]);
我现在不知道如何写我的声明。
感谢您在下面的建议,@Gael_J。
我已经尝试过,那样(因为map.values()
在 Java 中返回一个Collection<Commune>
,我首先要将其转换为java.util.List
:
import org.apache.spark.sql._
import scala.collection.mutable._;
import spark.implicits._
var communeList: ArrayBuffer[Commune] = new ArrayBuffer[Commune];
communes.values().stream().forEach(commune => communeList.append(commune));
var datasetCommunes = communeList.toSeq.toDS();
但我收到错误:
error: value toDS is not a member of Seq[fr.ecoemploi.application.etude.swagger.model.Commune]
var datasetCommunes = communeList.toSeq.toDS();
如果Commune
是一个案例 class,您应该能够从自动Encoder
中受益,如下所示:
import spark.implicits._
val ds = communes.values().toSeq().toDS()
我将添加到@GaëlJ 的回答中,如果Commune
是一个 POJO,那么它应该是一个 bean,你应该手动定义它的编码器
import spark.implicits._
implicit val enc = Encoders.bean(classOf[Commune])
Seq(new Commune(...)).toDS()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.