我正在尝试在我们的数据 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
- worker 类型:
- 第 2 组
- worker 类型:
- 28.0 GB 内存,4 核,1 DBU Standard_DS3_v2
- worker 8
- worker 类型:
任何让它在较小的机器上运行的建议都将不胜感激。
编辑:我又找回了这个问题,找到了答案。您可以为此创建一个只有一个节点的自定义集群。然后它将正常工作。
最佳答案
当您使用 %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/