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