У меня есть блок кода для генерации данных и записи данных в хранилище S3. Особый случай - это идентификатор камеры, который может содержать «+ = -», и это поле для раздела.
data = bytearray(random.getrandbits(8) for _ in range(5))
ref_id = '0'
d = '2019-01-01'
rows = []
for camera_id in ['test=1234']:
for c in range(1):
rows.append(Row(ref_id=ref_id,
camera_id=camera_id,
date=d,
data=data
))
df = spark._sc.parallelize(rows).toDF()
df.write.mode("overwrite")\
.partitionBy('ref_id','date','camera_id')\
.parquet('s3a://hello/tmp/test_s3')
При использовании Minio он всегда работает, пока я переключаюсь на Radosgw для производства. выдает ошибку
в орг. apache .spark.scheduler.Task.run (Task. scala: 121) в орг. apache .spark.executor.Executor $ TaskRunner $ $ anonfun $ 10.применить (Исполнитель. scala: 408) в орг. apache .spark.util.Utils $ .tryWithSafeFinally (Utils. scala: 1360) в орг. apache .spark.executor.Executor $ TaskRunner.run (Executor. scala: 414) в java .util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor. java: 1149) в java .util.concurrent.ThreadPoolExecutor $ Worker.run (Thread . java: 624) в java .lang.Thread.run (Thread. java: 748) Причина: java .io.FileNotFoundException: Нет такого файла или каталога: s3a: // hello / tmp / test_s3_path_2 / _teven / 0 / _tever / попытки_20200224103012_0008_m_000002_17 / ref_id = 0 / date = 2019-01-01 / camera_id = test = 1234 в орг. java: 1931) в орг. apache .had oop .fs.s3a.S3AFileSystem.innerGetFileStatus (S3AFileSystem. java: 1822) в орг. apache .had oop .fs.s3a. S3AFileSystem.getFileStatus (S3AFileS ystem. java: 1763) в орг. apache .had oop .fs.s3a.S3AFileSystem.innerListStatus (S3AFileSystem. java: 1585) в орг. apache .had oop .fs. s3a.S3AFileSystem.listStatus (S3AFileSystem. java: 1561)
Я попытался закодировать столбец значений вручную, но безуспешно. По сути, при тестировании с minio часть значения будет закодирована в безопасном стиле URL.
Есть предложения по решению этой проблемы?