【问题标题】:How to list the files in azure data lake using spark from pycharm(local IDE) which is connected using databricks-connect如何使用来自使用 databricks-connect 连接的 pycharm(本地 IDE)的 spark 列出 azure 数据湖中的文件
【发布时间】:2020-05-24 15:15:54
【问题描述】:

我正在我的本地机器上使用 pycharm 编写一些代码。 执行在databricks集群上完成,而数据存储在azure datalake上。

基本上,我需要列出 azure datalake 目录中的文件,然后对文件应用一些读取逻辑,为此我使用以下代码

sc = spark.sparkContext
hadoop = sc._jvm.org.apache.hadoop

fs = hadoop.fs.FileSystem
conf = hadoop.conf.Configuration()

path = hadoop.fs.Path('adl://<Account>.azuredatalakestore.net/<path>')
for f in fs.get(conf).listStatus(path):
    print(f.getPath(), f.getLen())

上述代码在 databricks 笔记本上运行良好,但是当我尝试使用 databricks-connect 通过 pycharm 运行相同的代码时,出现以下错误。

"Wrong FS expected: file:///....."

经过一番挖掘后发现,代码正在我的本地驱动器中查找“路径”。 我对 python 库(os、pathlib)也有类似的问题

我在集群上运行其他代码没有问题。

在弄清楚如何运行它以便搜索数据湖而不是我的本地计算机时需要帮助。

此外,由于某些限制,不能选择 azure-datalake-store 客户端。

【问题讨论】:

  • 你能试试dbutils.fs.ls("SOMEPATH") 吗?

标签: azure pycharm azure-databricks databricks-connect


【解决方案1】:

你可以用这个。

import org.apache.hadoop.conf.Configuration
import org.apache.hadoop.fs.{Path, FileSystem}
import org.apache.spark.deploy.SparkHadoopUtil
import org.apache.spark.sql.execution.datasources.InMemoryFileIndex
import java.net.URI

def listFiles(basep: String, globp: String): Seq[String] = {
  val conf = new Configuration(sc.hadoopConfiguration)
  val fs = FileSystem.get(new URI(basep), conf)

  def validated(path: String): Path = {
    if(path startsWith "/") new Path(path)
    else new Path("/" + path)
  }

  val fileCatalog = InMemoryFileIndex.bulkListLeafFiles(
    paths = SparkHadoopUtil.get.globPath(fs, Path.mergePaths(validated(basep), validated(globp))),
    hadoopConf = conf,
    filter = null,
    sparkSession = spark)

  fileCatalog.flatMap(_._2.map(_.path))
}

val root = "/mnt/{path to your file directory}"
val globp = "[^_]*"

val files = listFiles(root, globp)
files.toDF("path").show()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-09
    • 1970-01-01
    • 2021-05-10
    • 1970-01-01
    • 1970-01-01
    • 2019-12-02
    • 2018-08-31
    相关资源
    最近更新 更多