如何阅读 .斯卡拉中的 MDB 文件



我的任务是将.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()
            }
        } 
    }
}

你的问题是你只调用一个表来读入这段代码

val table = db.getTable("table1");

您应该在数据库中获取可用表的列表,然后循环访问它们。

val tableNames = db.getTableNames

然后,您可以循环访问表名称。 这应该为您解决在多个表中阅读的问题。 不过,您可能需要更新其余代码才能获得所需的代码。

您确实应该找到一个与MS Access一起使用的JDBC驱动程序,而不是手动尝试自己解析文件。

例如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 jar 插入上下文中: ucanaccess-4.0.2.jar,jackcess-2.1.6.jar,hsqldb.jar

原生解决方案

运行终端命令

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

相关内容

  • 没有找到相关文章