Как читать файлы.MDB в Scala
У меня есть задача конвертировать файлы.mdb в файлы.csv. С помощью приведенного ниже кода я могу прочитать только один файл таблицы из файла.mdb. Я не могу прочитать, если файлы.mdb содержат более одной таблицы, и я хочу хранить все файлы по отдельности. Пожалуйста, помогите мне в этом.
object mdbfiles {
Logger.getLogger("org").setLevel(Level.ERROR)
val spark = SparkSession.builder().appName("Positional File Reading").master("local[*]").getOrCreate()
val sc = spark.sparkContext // Just used to create test RDDs
def main(args: Array[String]): Unit = {
val inputfilepath = "C:/Users/phadpa01/Desktop/InputFiles/sample.mdb"
val outputfilepath ="C:/Users/phadpa01/Desktop/sample_mdb_output"
val db = DatabaseBuilder.open(new File(inputfilepath))
try {
val table = db.getTable("table1");
for ( row <- table) {
//System.out.println(row)
val opresult = row.values()
}
}
}
}
2 ответа
Ваша проблема в том, что вы вызываете только одну таблицу для чтения с этим битом кода
val table = db.getTable("table1");
Вы должны получить список доступных таблиц в БД и затем зациклить их.
val tableNames = db.getTableNames
Затем вы можете перебирать имена таблиц. Это должно решить проблему для вас в чтении более чем в одной таблице. Возможно, вам придется обновить остальную часть кода, чтобы получить его так, как вы хотите.
Вы действительно должны найти драйвер JDBC, который работает с MS Access, а не пытаться анализировать файл вручную.
Например UCanAccess
Затем это простая команда SparkSQL, и у вас есть DataFrame
val jdbcDF = spark.read
.format("jdbc")
.option("url", "jdbc:ucanaccess://c:/Users/phadpa01/Desktop/InputFiles/sample.mdb;memory=false")
.option("dbtable", "table1")
.load()
И одна строка в CSV
jdbcDF.write.format("csv").save("table1.csv")
Не забудьте вставить файлы UcanAccess в контекст: ucanaccess-4.0.2.jar,jackcess-2.1.6.jar,hsqldb.jar
Алернационное решение
Запустите терминальную команду