pyspark - 在数据 block 上提取 tar.gz

标签 pyspark extract tar databricks

我正在尝试在我们的数据 block 环境中提取大约 5 gig(内容大约 35)的 tar.gz。 我试图用以下方法提取它:

tar = tarfile.open(blob_storage_location', 'r:gz')
tar.extractall()
tar.close()

也将其复制到我们的数据 block 环境中,然后进行尝试。

还试过:

%sh
tar xvzf $(find /dbfs/tmp/ -name '*.tar.gz' -print ) -C /dbfs/tmp/

和:

shutil.unpack_archive(path, path, gz)

他们都开始然后一直挂着。只有当我使用我们最大的默认集群时它才有效,但我觉得它也应该适用于较小的集群(因为它适用于我的笔记本电脑)。

差异集群:

  • 集群 1
    • worker 类型:
      • 14.0 GB 内存,4 核,0.75 DBU Standard_DS3_v2
      • 最少 worker 2 最多 worker 8
  • 第 2 组
    • worker 类型:
      • 28.0 GB 内存,4 核,1 DBU Standard_DS3_v2
      • worker 8

任何让它在较小的机器上运行的建议都将不胜感激。

编辑:我又找回了这个问题,找到了答案。您可以为此创建一个只有一个节点的自定义集群。然后它将正常工作。

最佳答案

当您使用 %sh 或任何 Python 库时,您有多少工作人员并不重要 - 工作仅在驱动程序节点上完成。 我怀疑问题是您有很多文件,将数据解包到 DBFS 可能是一个瓶颈。

我会建议先尝试将数据解压到本地磁盘,然后将解压后的文件移动到 DBFS。

tar xvzf /dbfs/..../file.tar.gz -C /tmp/unpacked

然后移动:

dbutils.fs.mv("file:/tmp/unpacked", "dbfs:/tmp/", True)

关于pyspark - 在数据 block 上提取 tar.gz,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63409720/

相关文章:

python - Pyspark DataFrame 计算某一列的值在另一列中出现的次数

duplicates - 删除超过 4 个的重复项。最多仅保留 4 个重复项

matlab - 查找仅包含零的行

java - 用python读取.jar文件的源代码

apache-spark - PySpark randomSplit 与 SkLearn 训练测试分割 - 随机种子问题

apache-spark - Spark KMeans 聚类 : get the number of sample assigned to a cluster

regex - 从日志文件中提取特定行的数据

java - 在 Java 中创建带有国家字符的 tar 存档

linux - Tar 并将结果直接保存到 SSH 目录

linux - tar命令使用区别