[Scala 2.12] Integrare Cats Effect 3 e Scio - Google Dataflow

di il
1 risposte

[Scala 2.12] Integrare Cats Effect 3 e Scio - Google Dataflow

Buonasera a tutti,

Io sviluppo, usando come linguaggio di programmazione scala 2.12 . Sto studiando, per questo scopo, un framework che si chiama “Cats effect 3.0”. Programmazione funzionale. Visto che ho anche un po di familiarità con l'hyperscaler di Google: Google Cloud Platform, vorrei provare ad integrare cats effect sotto GCP. Per fare questo, uso un template che si chiama “Scio”, in particolare il template minimal, che è “WordCount”. Ecco il riferimento a github: https://github.com/spotify/scio/blob/main/scio-examples/src/main/scala/com/spotify/scio/examples/WordCount.scala nella mia versione però, ho dovuto customizzarlo, proprio per integrare cats, ma al momento non sono riuscito a farlo funzionare.

Questa la mia versione:

object StimaAccessi {

  def main(args: Array[String]) : Unit = {

    val pathSQLdump : String = ("/home/...fullPath.../auth.log");

    val optionsFactory : org.
                         apache.
                         beam.
                         sdk.
                         options.
                         PipelineOptions = org.
                                           apache.
                                           beam.
                                           sdk.
                                           options.
                                           PipelineOptionsFactory.create();

    optionsFactory.setRunner(classOf[DataflowRunner]);
    optionsFactory.as(classOf[GcpOptions]).setProject("XXX");
    optionsFactory.as(classOf[DataflowPipelineOptions]).setRegion("europe-west2-b");
//  optionsFactory.as(classOf[DataflowPipelineOptions]).setStaginglocation("gs://XXX");

    val pipeline : org.
                   apache.
                   beam.
                   sdk.
                   Pipeline = org.
                              apache.
                              beam.
                              sdk.
                              Pipeline.
                              create(optionsFactory);

    val sc : com.
             spotify.
             scio.
             ScioContext = com.
                           spotify.
                           scio.
                           ScioContext(optionsFactory);

//  val records : List[String] = Source.fromFile(SQLdump).getLines.toList;

    val authGStorage = "gs://XXX";
    val desinationGStorageDirectory = "gs://XXX";

    sc.textFile(authGStorage).
       map(_.trim).
       flatMap(_.split("[^a-zA-Z']+").
       filter(_.nonEmpty)).
       countByValue.
       map(t => t._1 + ": " + t._2).
       saveAsTextFile(desinationGStorageDirectory);

    sc.run().waitUntilFinish();

    IO.println("");

//  }.as(ExitCode.Success); //Chiude la run
}
println("Sono arrivato all'esterno della funzione main");

}//Chiude l'object

Ho intenzionalmente omesso tutti gli “import” per leggere un po piu leggibile il codice, ma il risultato della build è:

[error] (run-main-0) java.lang.VerifyError: Cannot inherit from final class
[error] java.lang.VerifyError: Cannot inherit from final class

Qualcuno ha idea di come risolvere per caso?

Grazie

1 Risposte

  • Re: [Scala 2.12] Integrare Cats Effect 3 e Scio - Google Dataflow

    Alla fine, facendo debug, ho circoscritto il problema alle quattro istruzioni optionFactory.setRunner… e le tre che seguono. Se le escludo e commento anche tutti i metodi che le ereditano funziona tutto correttamente. Sto facendo indagini per capire quale potrebbe essere il problema. Probabilmente è colpa mia, perche questo codice è il risultato del copia-incolla di una setrie di template trovati su internet, e dovevo immaginare che qualcosa non avrebbe funzionato. Scrivo qui, per tenere traccia dell'avanzamento, ma sono coonscio del fatto che scala e “cats”, non sia molto diffuso come abbinamento.

    Grazie

    Leo  

Devi accedere o registrarti per scrivere nel forum
1 risposte