0

尝试遍历已安装的 Databricks 卷中的目录时,我收到 ClassCastException。

java.lang.ClassCastException: com.databricks.backend.daemon.dbutils.FileInfo cannot be cast to com.databricks.service.FileInfo
    at scala.collection.TraversableLike.$anonfun$map$1(TraversableLike.scala:238)
    at scala.collection.IndexedSeqOptimized.foreach(IndexedSeqOptimized.scala:36)
    at scala.collection.IndexedSeqOptimized.foreach$(IndexedSeqOptimized.scala:33)
    at scala.collection.mutable.WrappedArray.foreach(WrappedArray.scala:38)
    at scala.collection.TraversableLike.map(TraversableLike.scala:238)
    at scala.collection.TraversableLike.map$(TraversableLike.scala:231)
    at scala.collection.AbstractTraversable.map(Traversable.scala:108)
    at com.mycompany.functions.UnifiedFrameworkFunctions$.getAllFiles(UnifiedFrameworkFunctions.scala:287)

getAllFiles函数如下所示:

    import com.databricks.service.{DBUtils, FileInfo}
    ...
    def getAllFiles(path: String): Seq[String] = {
        val files = DBUtils.fs.ls(path)
        if (files.isEmpty)
            List()
        else
            files.map(file => { // line where exception is raised
                val path: String = file.path
                if (DBUtils.fs.dbfs.getFileStatus(new org.apache.hadoop.fs.Path(path)).isDirectory) getAllFiles(path)
                else List(path)
            }).reduce(_ ++ _)
    }

在本地,它使用 Databricks Connect 运行正常,但是当 src 代码打包为 jar 并在 Databricks 集群上运行时,会引发上述异常。

由于 Databricks 在他们的文档中建议使用com.databricks.service.DBUtils并且在调用DBUtils.fs.ls(path)它时FileInfo从同一个service包返回 - 这是一个错误还是应该以其他方式使用 api?

我正在使用 8.1 版的 Databricks Connect & Runtime

4

1 回答 1

1

我尝试了一种解决方法来从文件夹中获取文件名。

我已执行以下步骤以从挂载目录中获取文件名列表。

我在“mnt/Sales/”位置存储了 3 个文件。

第一步:使用display(dbutils.fs.ls(“/mnt/Sales/”))命令。 在此处输入图像描述

步骤 2:将文件位置分配给variable.

在此处输入图像描述

Step3:将变量加载到数据框并获取文件名。

在此处输入图像描述

于 2021-10-05T10:34:43.203 回答