python - PySpark:如何解析依赖项 zip 文件中存在的资源文件的路径
问题描述
我mapPartitions
在 RDD 上有一个,在每个分区中,必须打开一个资源文件。该模块包含调用的方法和资源文件,使用参数作为 zip 文件mapPartitions
将其传递给每个执行程序。--py-files
说清楚:
rdd = rdd.mapPartitions(work_doing_method)
def work_doing_method(rows):
for row in rows:
resource_file_path = os.path.join(os.path.dirname(__file__), "resource.json")
with open(resource_file_path) as f:
resource = json.loads(f.read())
...
当我使用参数将包含所有这些的 zip 文件传递--py-file
给 spark-submit 命令后执行此操作时,
我明白了IOError: [Errno 20] Not a directory:/full/path/to/the/file/within/zip/file
我不明白 Spark 如何使用 zip 文件来读取依赖项。该os.path.dirname
实用程序返回包括 zip 文件的完整路径,例如。/spark/dir/my_dependency_file.zip/path/to/the/resource/file
. 我相信这应该是问题所在。我尝试了很多组合来解析文件的路径。任何帮助表示赞赏。
谢谢!
解决方案
我认为当您将文件添加到 Spark 作业时,它将被复制到每个执行程序的工作目录中。我使用SparkFiles API来获取执行器上文件的绝对路径。
您还可以使用该--archives
标志传递任意数据存档,例如 zipfile。pyspark作业参数中的--archives,--files,py-files有什么区别
推荐阅读
- ruby-on-rails - 什么会导致 Postgres 失去对下一个 ID 的跟踪,我该如何解决?
- mysql - SQL Server 选择语句的问题
- flutter - 如何从 workmananger 的隔离区向主隔离区发送数据?
- java - com.facebook.react.common.JavascriptException:错误:元素类型无效
- rust - 在 for 循环中使用正则表达式
- react-testing-library - 使用 getByRole 选择具有特定描述的网格单元
- php - HTML PHP 块错误
- cocoa - 如何让 NSScrollView 在没有 Shift 键的情况下使用滚轮水平滚动?
- generics - 在 Ada 中,为什么不使用通用父级实例化子级,为什么我也必须使其通用?
- azure-cosmosdb - Azure Cosmos 设置历史记录