Spark で複数のファイルを読み込もうとしています ファイルは avro ファイルであり、datalake という名前の Minio バケットに保存されています
私が使用している:HadoopなしでコンパイルされたSpark 2.2.1
Minio (最新の minio/minio docker)
2 つのパッケージ: com.databricks:spark-avro_2.11:4.0.0 および org.apache.hadoop:hadoop-aws:2.8.3
私は現在 pyspark でテストしています:
PYSPARK_PYTHON=python3 /usr/local/spark/pyspark --packages com.databricks:spark-avro_2.11:4.0.0,org.apache.hadoop:hadoop-aws:2.8.3
Minio との接続の初期化:
AWS_ID='localKey'
AWS_KEY='localSecret'
sc._jsc.hadoopConfiguration().set("fs.s3a.access.key", AWS_ID)
sc._jsc.hadoopConfiguration().set("fs.s3a.secret.key", AWS_KEY)
sc._jsc.hadoopConfiguration().set("fs.s3a.endpoint", "http://127.0.0.1:9000")
ファイルがバケット ルートに直接保存されている場合、次のようなワイルドカードを使用できます。
DF_RANDOM = spark.read.format("com.databricks.spark.avro").load("s3a://datalake/random-random_table+0+000000001*.avro")
結果はOKです:
DF_RANDOM.show()
+-----+-------------------+---+-------------+
|index| A| B| timestamp|
+-----+-------------------+---+-------------+
| 12| 0.5680445610939323| 1|1530017325000|
| 13| 0.925596638292661| 5|1530017325000|
| 14|0.07103605819788694| 4|1530017325000|
| 15|0.08712929970154071| 7|1530017325000|
+-----+-------------------+---+-------------+
ただし、ファイルがサブフォルダーに保存されている場合:
DF_RANDOM = spark.read.format("com.databricks.spark.avro").load("s3a://datalake/random/random-random_table+0+000000001*.avro")
エラーが発生します:
Py4JJavaError: An error occurred while calling o111.load. : java.nio.file.AccessDeniedException: s3a://datalake/random: getFileStatus on s3a://datalake/random: com.amazonaws.services.s3.model.AmazonS3Exception: Forbidden (Service: Amazon S3; Status Code: 403; Error Code: 403 Forbidden; Request ID: null), S3 Extended Request ID: null
理由がわかりません。サブフォルダーは、kafka コネクターによって作成されます。
ワイルドカードを使用しない場合、次のように、これらのサブフォルダーに保存されているファイルにアクセスできることに注意してください。
DF_RANDOM = spark.read.format("com.databricks.spark.avro").load("s3a://datalake/random/random-random_table+0+0000000012.avro")
set へのポリシーまたはアクセスはありますか? spark.read 命令は s3://datalake/random をファイルのように読み取るようですが、参照するフォルダーです
何か案が ?
とにかくありがとう