Как параллельно вставить в Hive с помощью pyspark - PullRequest
0 голосов
/ 03 мая 2020

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

result = df.rdd.map(lambda rdd: predict_item_by_model(rdd, columns)).collect()
df_list = sc.parallelize(result).map(lambda df: hiveContext.createDataFrame(df)).collect() #throws error
mergedDF = reduce(DataFrame.union, df_list) 
mergedDF.write.mode('overwrite').partitionBy("item_id").saveAsTable("items")

, но теперь выдает эту ошибку

_pickle.PicklingError: Could not serialize object: Exception: It appears that you are attempting to reference SparkContext from a broadcast variable, action, or transformation. SparkContext can only be used on the driver, not in code that it run on workers. For more information, see SPARK-5063.

есть ли у вас прямой доступ к улью у работников? если нет, то как я могу собрать данные и вставить их один раз?

1 Ответ

0 голосов
/ 03 мая 2020
.map(lambda df: hiveContext.createDataFrame(df))

Просто не возможно в Spark такой подход. Не совсем так.

Первым шагом любого приложения драйвера Spark является создание SparkContext, включая контекст Hive, если это необходимо. Только аспект драйвера. Как говорится в сообщении.

Посмотрите здесь https://www.waitingforcode.com/apache-spark/serialization-issues-part-1/read, чтобы разобраться с этой проблемой сериализации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...