Как читать файлы.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

Алернационное решение

Запустите терминальную команду

http://ucanaccess.sourceforge.net/site.html

Другие вопросы по тегам