У меня есть файл на 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 (не подлежит обсуждению)