J'ai un jeu de données en parquet dans S3 partitionné par date (dt) avec la date la plus ancienne stockée dans AWS Glacier pour économiser de l'argent. Par exemple, nous avons ...étincelle lire les données partitionnées dans S3 en partie dans le glacier
s3://my-bucket/my-dataset/dt=2017-07-01/ [in glacier]
...
s3://my-bucket/my-dataset/dt=2017-07-09/ [in glacier]
s3://my-bucket/my-dataset/dt=2017-07-10/ [not in glacier]
...
s3://my-bucket/my-dataset/dt=2017-07-24/ [not in glacier]
Je veux lire cet ensemble de données, mais seulement un sous-ensemble de date qui ne sont pas encore dans le glacier, par exemple:
val from = "2017-07-15"
val to = "2017-08-24"
val path = "s3://my-bucket/my-dataset/"
val X = spark.read.parquet(path).where(col("dt").between(from, to))
Malheureusement, je la exception
java.io.IOException: com.amazon.ws.emr.hadoop.fs.shaded.com.amazonaws.services.s3.model.AmazonS3Exception: The operation is not valid for the object's storage class (Service: Amazon S3; Status Code: 403; Error Code: InvalidObjectState; Request ID: C444D508B6042138)
Je semble que cette étincelle n'aime pas le jeu de données partitionné lorsque certaines partitions sont dans Glacier. Je pourrais toujours lire spécifiquement chaque date, ajouter la colonne avec la date actuelle et reduce(_ union _)
à la fin, mais il est moche comme l'enfer et il ne devrait pas être nécessaire.
Existe-t-il une astuce pour lire les données disponibles dans le magasin de données même avec des données anciennes dans glacier?
Je ne crois pas que ce soit possible. AWS Glacier ne semble pas prendre en charge les prédicats pushdown ... – eliasah
N'utilisez pas glacier si vous avez besoin de récupérer des données récentes. Cela n'en vaut pas la peine, et vous pourriez entrer dans un piège de prix. Juste stocker vos données et standard-IA. https://medium.com/@karppinen/how-i-ended-up-paying-150-for-a-single-60gb-download-from-amazon-glacier-6cb77b288c3e – mootmoot
Salut moquant. Je ne veux pas débloquer les données dans Glacier (ce qui serait prohibitif). Mon point était que je veux utiliser des partitions de mon ensemble de données qui ne sont pas encore dans le glacier, mais d'autres partitions (que je ne veux pas lire) sont! Je pense que la seule façon est de modifier le SDK AWS, afin qu'il n'essaie pas d'analyser les partitions gelées du tout. – Boris