Непоследовательное поведение между Minio и Radoswgw при использовании Spark - PullRequest
0 голосов
/ 24 февраля 2020

У меня есть блок кода для генерации данных и записи данных в хранилище 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.

Есть предложения по решению этой проблемы?

...