[英]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.