Как использовать спарк-сессию в функции Python? - PullRequest
0 голосов
/ 14 мая 2019

Я хочу использовать Spark Session в методе python, но получаю ошибку: «SparkContext можно использовать только в драйвере, но не в коде, который он запускает на рабочих. Для получения дополнительной информации см. SPARK-5063».я пытаюсь запустить sparksession из метода, который вызывается другим методом, при запуске в основной функции код работает.

    def hive_company(tuples):
        spark.sql("insert into table hive_table values(\'%s\',\'%s\')" % tuples)

    def data_set(data):
        company = data["EMPLOYER_NAME"]
        soc_name = data["SOC_NAME"]
        if (company == 'XYZ LIMITED'):
            comp_tuple = (company, soc_name)
            hive_visa.hive_company(comp_tuple)

Ошибка: не удалось сериализовать объект: исключение: кажется, что вы пытаетесьссылаться на SparkContext из широковещательной переменной, действия или преобразования.SparkContext может использоваться только в драйвере, а не в коде, который он запускает на рабочих.Для получения дополнительной информации см. SPARK-5063.

Ответы [ 2 ]

0 голосов
/ 15 мая 2019

Невозможно сделать то, что вы пытаетесь сделать.

Код написан и запускается на драйвере с драйвером, отправляя такие команды, как map, filter или pipelined такие команды исполнителям, как Tasks, длязапустите раздел (ы) на этом Executor.

В сообщении говорится, что это невозможно.

0 голосов
/ 14 мая 2019

Вы должны определить SparkSession. Вы можете попробовать этот пример -

from pyspark.sql import SparkSession

spark = SparkSession.builder \
    .master("yarn") \
    .appName("python_func_example") \
    .config("spark.some.config.option", "some-value-sample-entry") \
    .enableHiveSupport() \
    .getOrCreate()


def python_func_example (schema, table):
    query = "select * from {}.{}"
    df = spark.sql(query.format(schema, table))
    return df


if __name__ == '__main__':
    python_func_example()
...