Я пытаюсь реализовать создание набора данных Uber Petastorm, которое использует Spark для создания файла паркета, следуя инструкциям на их странице Github .
Код:
spark = SparkSession.builder.config('spark.driver.memory', '10g').master('local[4]').getOrCreate()
sc = spark.sparkContext
with materialize_dataset(spark=spark, dataset_url='file:///opt/data/hello_world_dataset',
schema=MySchema, row_group_size_mb=256):
logging.info('Building RDD...')
rows_rdd = sc.parallelize(ids)\
.map(row_generator)\ # Generator that yields lists of examples
.flatMap(lambda x: dict_to_spark_row(MySchema, x))
logging.info('Creating DataFrame...')
spark.createDataFrame(rows_rdd, MySchema.as_spark_schema()) \
.coalesce(10) \
.write \
.mode('overwrite') \
.parquet('file:///opt/data/hello_world_dataset')
Теперь код СДР выполняется успешно, но происходит сбой только вызова .createDataFrame
со следующей ошибкой:
_pickle.PicklingError: Не удалось сериализовать широковещательную рассылку: OverflowError: невозможно сериализовать строку, размер которой превышает 4 ГБ
Это мой первый опыт работы со Spark, поэтому я не могу точно сказать, происходит ли эта ошибка в Spark или Petastorm.
Просмотр других решений этой ошибки (в отношении Spark, а не Petastorm) Я видел, что это может быть связано с протоколом травления, но я не могу подтвердить это, и при этом я не нашел способ изменить протокол травления.
Как я мог избежать этой ошибки?