如何在scala中读取.MDB文件
我的任务是将.mdb文件转换为.csv文件。在下面代码的帮助下,我只能从.mdb文件中读取一个表文件。如果.mdb文件包含多个表,并且希望单独存储所有文件,则无法读取。请在这方面帮助我如何在scala中读取.MDB文件,scala,ms-access,apache-spark,jackcess,Scala,Ms Access,Apache Spark,Jackcess,我的任务是将.mdb文件转换为.csv文件。在下面代码的帮助下,我只能从.mdb文件中读取一个表文件。如果.mdb文件包含多个表,并且希望单独存储所有文件,则无法读取。请在这方面帮助我 object mdbfiles { Logger.getLogger("org").setLevel(Level.ERROR) val spark = SparkSession.builder().appName("Positional File Reading").master("local
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()
}
}
}
}
对象MDB文件{
Logger.getLogger(“org”).setLevel(Level.ERROR)
val spark=SparkSession.builder().appName(“位置文件读取”).master(“本地[*]”)。getOrCreate()
val sc=spark.sparkContext//仅用于创建测试RDD
def main(args:Array[String]):Unit={
val inputfilepath=“C:/Users/phadpa01/Desktop/InputFiles/sample.mdb”
val outputfilepath=“C:/Users/phadpa01/Desktop/sample\u mdb\u输出”
val db=DatabaseBuilder.open(新文件(inputfilepath))
试一试{
val table=db.getTable(“表1”);
对于(row,您的问题是,您只调用一个表来读取这段代码
val table = db.getTable("table1");
您应该获得数据库中可用表的列表,然后对它们进行循环
val tableNames = db.getTableNames
然后您可以迭代表名。这应该可以解决您在读取多个表时遇到的问题。您可能需要更新其余的代码,以获得您想要的结果。您应该找到一个与MS Access配合使用的JDBC驱动程序,而不是自己手动尝试解析文件
比如说
然后,它是一个简单的SparkSQL命令,您有一个数据帧
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
放射性溶液
运行终端命令
在读取表格时,数据将存储为对象集合,但我无法将对象集合转换为数据框,请帮助我。如果可能,这将非常有帮助,我将根据您的解决方案整理其余内容。“val opresult=row.values()”这是要将其转换为DataFrameMDB是通用格式吗?如果不是,您应该在此处显示该文件。此外,Spark真的需要用于此任务吗?您只使用标准Java方法调用。windows路径类似于'C:\\…\`是。MDB是通用格式。我们只需要使用Spark scala实现此功能。您阅读了Jav吗aDoc/ScalaDoc,用于您忽略了提及其来源的DatabaseBuilder
类?我假设您使用的是MS Access?您不能将SparkSQL与JDBC/ODBC驱动程序一起使用吗?为什么需要手动解析?实际上,我的任务是将所有.mdb文件转换为“TAB”分隔符csv文件。我能够读取mdb文件并将其存储在变量中,该变量是对象的集合。要进一步处理,需要将该对象转换为数据帧。我尝试过相同的方法,但出现空指针异常错误,我在EclipseBlow中添加了“jackAccess-2.0.0.jar”和“hsqldb.jar(2.2.5)”jar是我的代码“导入org.apache.spark.sql.{Row,SparkSession}import org.apache.spark.\uimport org.apache.log4j.\uobject mdbread{Logger.getLogger(“org”).setLevel(Level.ERROR)val spark=SparkSession.builder().appName(“位置文件读取”).master(“local[*]”)。getOrCreate()def main(args:Array[String]):Unit={val jdbcDF=spark.read.format(“jdbc”).option(“url”、“jdbc:ucanaccess://c:/Users/phadpa01/Desktop/InputFiles/sample.mdb;memory=false”).option(“dbtable”、“table1”).load()jdbcDF.show()}“1)空指针是您自己要解决的问题(如果它实际上是空指针)。2)必须将JAR添加到spark类路径,而不是eclipse类路径错误”[Ljava.lang.String;@1af05b03table1~TMPCLP400181Exception in thread“main”java.lang.NullPointerException“这种错误我是第一次遇到,在scala和java@dirceusemighiniClass.forName
只是查看是否可以加载,而不是实际加载