Записать несколько строк одновременно в s3 в формате паркета, используя sparkSession.createDataFrame - PullRequest
0 голосов
/ 10 апреля 2020

Я успешно создаю один кадр / строку и записываю в s3 в формате паркета, используя следующую команду:

data_for_frame = [{"Category": 'Category A', "ID": 1, "Value": Decimal(12.40)},
        {"Category": 'Category B', "ID": 2, "Value": Decimal(30.10)},
        {"Category": 'Category C', "ID": 3, "Value": Decimal(100.01)}
        ]


dynamic_frame = sparkSession.createDataFrame(data_frame, schema_frame)
frame = sparkSession.createDataFrame(data_frame, schema_frame)
frame.write.parquet(s3_path)

Как можно написать несколько строк одновременно, чтобы минимизировать запись каждый раз? Означает, что я создаю несколько строк и как-то передаю один большой кадр для записи в s3 за одну попытку. Я попытался поместить несколько кадров в список, а затем передал его в frame.write, но это не сработало с ошибкой AttributeError: 'list' object has no attribute 'write'

Также, если я пытаюсь записать в s3 в al oop с отдельными кадрами, это выдает ошибку с

AnalysisException: 'path s3://stackoverflow-test-bucket/testing/default_bucket/year=2020/month=4/day=4 already exists.;'

1 Ответ

1 голос
/ 10 апреля 2020

При попытке записи в l oop необходимо добавить mode как append.

  • По умолчанию, если искра нашла directory, который мы пишем exists выдает ошибку
  • Мы должны выбрать либо append (добавляет новые файлы в каталог) (или) overwrite (удаляет и воссоздает каталог) справочник.

frame.write.mode("append").parquet(s3_path)
...