KrisP ma prawo do niego. Najlepszym sposobem, aby zrobić upsert nie jest przez przygotowane oświadczenie. Ważne jest, aby pamiętać, że ta metoda będzie wstawiać po jednym na raz z tak wieloma partycjami, jak liczba pracowników, których masz. Jeśli chcesz to zrobić w partii można także
import java.sql._
dataframe.coalesce("NUMBER OF WORKERS").mapPartitions((d) => Iterator(d)).foreach { batch =>
val dbc: Connection = DriverManager.getConnection("JDBCURL")
val st: PreparedStatement = dbc.prepareStatement("YOUR PREPARED STATEMENT")
batch.grouped("# Of Rows you want per batch").foreach { session =>
session.foreach { x =>
st.setDouble(1, x.getDouble(1))
st.addBatch()
}
st.executeBatch()
}
dbc.close()
}
Spowoduje to wykonanie partii dla każdego pracownika i zamknąć połączenie DB. Daje ci kontrolę nad liczbą pracowników, ilością partii i pozwala pracować w tych granicach.
Również, jak zastąpić istniejącą tabelę jcbc? Widzę tylko opcję df.write.mode(). SaveAsTable() Ale to nie obsługuje tabel jdbc – void
dataframe.write.mode (SaveMode.OverWrite) –