A meno che Dataset è cached utilizzando uno spazio di archiviazione affidabile (standard Spark cache ti darà solo deboli garanzie) è possibile accedere al database più volte, ogni volta mostrando lo stato corrente del database. Dal
vedere conteggi diversi è un comportamento previsto.
Inoltre, se l'origine JDBC viene utilizzata in modalità distribuita (con colonna di partizionamento o predicates ), quindi ogni thread dell'esecutore utilizzerà la propria transazione. Di conseguenza lo stato del Dataset potrebbe non essere del tutto coerente.
Non utilizzare JDBC. Puoi per esempio
COPYdati in un file system e caricarlo da lì.- Utilizza la soluzione di replica di tua scelta per creare una replica dedicata per l'analisi e impostare e sospendere la replica durante l'utilizzo dell'analisi dei dati.