Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在scala中读取.MDB文件_Scala_Ms Access_Apache Spark_Jackcess - Fatal编程技术网

如何在scala中读取.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

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

        } 

    }

}
对象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@dirceusemighini
Class.forName
只是查看是否可以加载,而不是实际加载