我有将.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()
}
}
}
}
答案 0 :(得分:1)
您的问题是您只使用此位代码调用一个表
val table = db.getTable("table1");
您应该在db中获取可用表的列表,然后循环它们。
val tableNames = db.getTableNames
然后你可以迭代tableNames。这应该可以解决您在多个表中阅读的问题。您可能需要更新其余代码以获得它想要的效果。
答案 1 :(得分:1)
您应该找到一个与MS Access一起使用的JDBC驱动程序,而不是手动尝试自己解析文件。
然后,它是一个简单的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
运行终端命令