Прочитать конкретную версию файла S3 в фрейме данных pyspark - PullRequest
2 голосов
/ 19 марта 2019

У меня есть файл на S3, и я могу прочитать его с помощью:

os.environ['PYSPARK_SUBMIT_ARGS'] = '--packages com.amazonaws:aws-java-sdk-pom:1.10.34,org.apache.hadoop:hadoop-aws:2.7.2 pyspark-shell'

spark = SparkSession.builder.getOrCreate()

spark.sparkContext._jsc.hadoopConfiguration().set("fs.s3a.impl", "org.apache.hadoop.fs.s3a.S3AFileSystem")
spark.sparkContext._jsc.hadoopConfiguration().set("fs.s3a.access.key",ACCESS_KEY)
spark.sparkContext._jsc.hadoopConfiguration().set("fs.s3a.secret.key",SECRET_KEY)

rdd = spark.sparkContext.textFile('s3a://bucket/file.json.gz')
df = spark.read.option("charset", "ISO-8859-1").option('encoding','UTF-8').json(rdd, allowUnquotedControlChars=False)

Однако теперь я хочу прочитать в предыдущую версию вышеуказанного файла (S3 имеет управление версиями файла), а не текущую. На вкладке «Обзор» файла я вижу на S3, что идентификатор версии равен BAvD7dIbWhbDb6uWMdpfXV9sNumt9Jkd, а URL-адрес объекта - https://s3.amazonaws.com/bucket/file.json.gz?versionId=BAvD7dIbWhbDb6uWMdpfXV9sNumt9Jkd. Однако ведро является частным, поэтому я не думаю, что к этому файлу можно получить доступ через URL объекта.

Я не видел хорошего способа чтения конкретной версии указанного файла непосредственно в фрейм данных pyspark. Я бы хотел сделать что-то подобное, но это не сработает:

rdd = spark.sparkContext.textFile('s3a://bucket/file.json.gz?versionId=BAvD7dIbWhbDb6uWMdpfXV9sNumt9Jkd')
df = spark.read.option("charset", "ISO-8859-1").option('encoding','UTF-8').json(rdd, allowUnquotedControlChars=False)

У кого-нибудь есть мысли?

Примечание:
- Версия Spark 2.4.0 (по договоренности)
- Python 2.7.15 (не подлежит обсуждению)

...