У меня есть Java-программа, которая выполняет код Spark.
Я использую приведенный ниже код для записи Dataset
в таблицу базы данных:
Encoder<OutputParams> outputEncoderforsummary = Encoders.bean(OutputParams.class);
Dataset<OutputParams> outputDataSetforsummary = outputDataSet1.map(rulesParamBeanforsummary-> outputforsummary(rulesParamBeanforsummary), outputEncoderforsummary);
outputDataSetforsummary.write().mode("append").format("jdbc").option("url", connection).option("dbtable", TXN_SUMMARY).save();
Согласно коду, OutputParams.java
используется в качестве кодера.
он содержит все поля таблицы TXN_SUMMARY
. В таблице около 113 полей.
OutputParams.java
public class OutputParams {
String ACCT_ID;
public String getACCT_ID() {
return ACCT_ID;
}
public void setACCT_ID(String aCCT_ID) {
ACCT_ID = aCCT_ID;
}
//Other fields and setter getters here.
}
одно из полей / столбцов: ACCT_ID
Тип данных: CHAR(10 BYTE)
После выполнения write()
, когда я проверял тип данных столбца ACCT_ID
, он изменяется на: VARCHAR2(255 BYTE)
, также изменяется тип данных всех остальных столбцов.
причина, которая приходит мне в голову, заключается в том, что класс кодировщика имеет то же поле с типом данных String
, и, следовательно, во время записи преобразовал в VARCHAR(255)
Но я хочу понять, меняет ли Spark тип данных столбцов в базе данных при записи данных в них? Есть ли вариант, чтобы предотвратить то же самое?
Версия Spark: 2.3.0