Невозможно прочитать текстовый файл в задании склеивания

Я пытаюсь прочитать schema из файла text в том же пакете, что и код, но не могу прочитать этот файл с помощью задания склеивания AWS. Я буду использовать это schema для создания фрейма данных с помощью Pyspark. Я могу загрузить этот файл локально. Я сжимаю файлы кода в формате .zip, помещаю их в корзину s3, а затем ссылаюсь на них в работе по склеиванию. Все остальное работает нормально. Никаких проблем. Но когда я пробую приведенный ниже код, он не работает.

file_path = os.path.join(Path(os.path.dirname(os.path.relpath(__file__))), "verifications.txt")
multiline_data = None
with open(file_path, 'r') as data_file:
   multiline_data = data_file.read()
self.logger.info(f"Schema is {multiline_data}")
           

Этот код выдает следующую ошибку:

Error Category: UNCLASSIFIED_ERROR; NotADirectoryError: [Errno 20] Not a directory: 'src.zip/src/ingestion/jobs/verifications.txt'  

Я тоже пробовал с abs_path, но тоже не помогло. Тот же блок кода отлично работает локально.

Я также пытался пройти путь "./verifications.txt" напрямую, но безуспешно.

И как мне прочитать этот файл?

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
0
98
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Скрипты AWS Glue обычно выполняются в управляемой среде, то есть ваш файл не виден сценарию ETL. Причина, по которой импорт работает на вашем локальном компьютере, заключается в том, что файл доступен оттуда, поскольку оба находятся на одном компьютере. Для таких работ рассмотрите возможность использования S3 для хранения файлов.

То есть вы имеете в виду, что файловые операции не будут работать в Glue? @Богдан

RushHour 27.06.2024 17:07
Ответ принят как подходящий

Как упомянул @Bogdan, способ сделать это — использовать S3 для хранения файла verifications.txt. Вот пример кода с использованием boto3

import boto3

# Hardcoded S3 bucket/key (these are normally passed in as Glue Job params)
s3_bucket = 'your-bucket-name'
s3_key = 'path/to/verifications.txt'

# Read data from S3 using boto3
s3_client = boto3.client('s3')
response = s3_client.get_object(Bucket=s3_bucket, Key=s3_key)
multiline_data = response['Body'].read().decode('utf-8')

Если вы хотите получить доступ к файлу напрямую из zip-архива (учитывая ваш комментарий), вам, возможно, придется проявить больше фантазии...

import boto3
import zipfile
import io

# Initialize boto3 client for S3
s3 = boto3.client('s3')

# Define the bucket name and the zip file key
bucket_name = 'your-bucket-name'
zip_file_key = 'path/to/src.zip'

# Download the zip file from S3
zip_obj = s3.get_object(Bucket=bucket_name, Key=zip_file_key)
buffer = io.BytesIO(zip_obj['Body'].read())

# Open the zip file in memory
with zipfile.ZipFile(buffer, 'r') as zip_ref:
    # List all files in the zip
    print("Files in the zip:", zip_ref.namelist())

    # Open and read a specific file within the zip without extracting
    with zip_ref.open('verifications.txt') as file:
        text_content = file.read().decode('utf-8')
        print("Contents of the text file:", text_content)

Мой вопрос остается прежним. Итак, ребята, по вашему мнению, мы не можем использовать файловые операции с zip-файлом? Есть ли ссылки, подтверждающие ваши обоснования, пожалуйста?

RushHour 28.06.2024 19:17

Я думаю, что здесь есть два измерения: первое и самое важное заключается в том, что S3 является «хранилищем объектов» и не поддерживает обычные операции с файлами Python, такие как прямое чтение файлов, второе — как мне прочитать что-то из zip-файла, не разархивируя его. . Надеюсь, мой обновленный ответ охватывает оба измерения. :)

Brian Wylie 07.07.2024 22:34

Да, имеет смысл

RushHour 08.07.2024 08:52

Другие вопросы по теме