Как я могу получить доступ к файловой системе emrfs из python в коде pyspark? - PullRequest
0 голосов
/ 21 января 2020

Я использую pyspark на Amazon EMR и мне нужен доступ к файлам, хранящимся в emrfs в s3, везде, где я смотрю, я могу найти только примеры того, как получить доступ к emrfs через API-интерфейс spark, но мне нужно получить доступ к нему в исполнителях , используя код python. Как я могу это сделать?

Ответы [ 2 ]

1 голос
/ 22 января 2020

Приведенный ниже код может помочь вам в перечислении содержимого сегмента в aws с использованием boto3.

from boto3.session import Session

ACCESS_KEY='your_access_key'
SECRET_KEY='your_secret_key'

session = Session(aws_access_key_id=ACCESS_KEY,
                  aws_secret_access_key=SECRET_KEY)
s3 = session.resource('s3')
your_bucket = s3.Bucket('your_bucket')

for s3_file in your_bucket.objects.all():
    print(s3_file.key)
0 голосов
/ 22 января 2020

Одним из решений является использование Имел oop FS API . Из Pyspark вы можете получить к нему доступ через JVM.

Вот пример, который перечисляет файлы из папки S3 Bucket и печатает пути.

Path = sc._gateway.jvm.org.apache.hadoop.fs.Path
conf = sc._jsc.hadoopConfiguration()

s3_folder = Path("s3://bucket_name/folder")
gs = s3_folder.getFileSystem(conf).globStatus(s3_folder)

for f in gs:
  print(f.getPath().toString())

Не уверен, почему вы хотите читать файлы таким способом, поскольку вы можете сделать это с помощью Spark, но вот способ с использованием метода Had oop FS open:

fs = s3_folder.getFileSystem(conf)
fs_data_input_stream = fs.open(s3_folder)

line = fs_data_input_stream.readLine()
while line:
    print(line)
    line = fs_data_input_stream.readLine()

Однако, если вы используете EMR Cluster, я рекомендую скопировать файлы из S3 в локальную систему и использовать их.

...