Pyspark: Сериализированное задание превышает максимально допустимое.Попробуйте увеличить spark.rpc.message.maxSize или использовать широковещательные переменные для больших значений. - PullRequest
0 голосов
/ 31 января 2019

Я выполняю вычисления в кластере, и в конце, когда я запрашиваю сводную статистику по моему фрейму данных Spark с помощью df.describe (). Show (), я получаю сообщение об ошибке:

Сериализованная задача 15: 0было 137500581 байт, что превышает максимально допустимое значение: spark.rpc.message.maxSize (134217728 байт).Попробуйте увеличить spark.rpc.message.maxSize или использовать широковещательные переменные для больших значений

В моей конфигурации Spark я уже пытался увеличить вышеупомянутый параметр:

spark = (SparkSession
         .builder
         .appName("TV segmentation - dataprep for scoring")
         .config("spark.executor.memory", "25G")
         .config("spark.driver.memory", "40G")
         .config("spark.dynamicAllocation.enabled", "true")
         .config("spark.dynamicAllocation.maxExecutors", "12")
         .config("spark.driver.maxResultSize", "3g")
         .config("spark.kryoserializer.buffer.max.mb", "2047mb")
         .config("spark.rpc.message.maxSize", "1000mb")
         .getOrCreate())

Я также пытался перераспределить своис использованием кадра данных:

dfscoring = dfscoring.repartition (100)

, но я продолжаю получать ту же ошибку.

Мое окружение: Python 3.5, Anaconda 5.0, Spark 2

Как избежать этой ошибки?

1 Ответ

0 голосов
/ 25 марта 2019

У меня была та же проблема, и я потратил впустую день своей жизни, чтобы никогда не вернутьсяЯ не уверен, почему это происходит, но вот как я сделал это для меня.

Шаг 1: Убедитесь, что PYSPARK_PYTHON и PYSPARK_DRIVER_PYTHON установлены правильно. Оказалось, что Python вработник (2.6) имел другую версию, чем в драйвере (3.6).Вы должны проверить, правильно ли установлены переменные окружения PYSPARK_PYTHON и PYSPARK_DRIVER_PYTHON.

Я исправил это, просто переключив свое ядро ​​с Python 3 Spark 2.2.0 на Python Spark 2.3.1 в Jupyter.Возможно, вам придется настроить его вручную.Вот как убедиться, что ваш PySpark настроен правильно https://mortada.net/3-easy-steps-to-set-up-pyspark.html

ШАГ 2. Если это не сработает, попробуйте обойти это: Этот переключатель ядра работал для DF, которые яя не добавил ни одного столбца в: spark_df -> panda_df -> back_to_spark_df .... но он не работал на DF, где я добавил 5 дополнительных столбцов. Итак, я попытался, и это сработало:

# 1. Select only the new columns: 

    df_write = df[['hotel_id','neg_prob','prob','ipw','auc','brier_score']]


# 2. Convert this DF into Spark DF:



     df_to_spark = spark.createDataFrame(df_write)
     df_to_spark = df_to_spark.repartition(100)
     df_to_spark.registerTempTable('df_to_spark')


# 3. Join it to the rest of your data:

    final = df_to_spark.join(data,'hotel_id')


# 4. Then write the final DF. 

    final.write.saveAsTable('schema_name.table_name',mode='overwrite')

Надеюсь, это поможет!

...