Pyspark - ошибка при сохранении данных в таблицу Hive «неразрешенный оператор« InsertIntoTable HiveTableRelation »» - PullRequest
0 голосов
/ 25 апреля 2019

Я использую следующее:

  • библиотека pyspark, версия 2.3.1
  • python, версия 2.7.1
  • hadoop, версия 2.7.3
  • куст, версия 1.2.1000.2.6.5.30-1
  • версия искры 2

Моя таблица улья выглядит следующим образом:

CREATE TABLE IF NOT EXISTS my_database.my_table
(
    division STRING COMMENT 'Sample column'
)

Iхочу сохранить данные в HIVE с помощью pyspark.Я использую следующий код:

spark_session = SparkSession.builder.getOrCreate()
hive_context = HiveContext(spark_session.sparkContext)
hive_table_schema = hive_context.table("my_database.my_table").schema
df_to_save = spark_session.createDataFrame([["a"],["b"],["c"]], schema=hive_table_schema)
df_to_save.write.mode("append").insertInto("my_database.my_table")

Но возникает следующая ошибка:

Traceback (most recent call last):
  File "/home/my_user/mantis service_quality_check__global/scripts/row_counts_preprocess.py", line 147, in <module> df_to_save.write.mode("append").insertInto(hive_table_row_counts_str)
  File "/usr/hdp/current/spark2-client/python/lib/pyspark.zip/pyspark/sql/readwriter.py", line 716, in insertInto
  File "/usr/hdp/current/spark2-client/python/lib/py4j-0.10.6-src.zip/py4j/java_gateway.py", line 1160, in __call__
  File "/usr/hdp/current/spark2-client/python/lib/pyspark.zip/pyspark/sql/utils.py", line 69, in deco
  pyspark.sql.utils.AnalysisException: u"unresolved operator 'InsertIntoTable HiveTableRelation `my_database`.`my_table`, org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe, [division#14], false, false;;\n'InsertIntoTable HiveTableRelation `my_database`.`my_table`, org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe, [division#14], false, false\n+- LogicalRDD [division#2], false\n"

Пожалуйста, есть кто-нибудь, кто может помочь с этим?Я застрял с этим несколько дней

1 Ответ

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

Я нашел проблему. SparkSession должен поддерживать улей. Метод enableHiveSupport () должен вызываться при создании сеанса зажигания.

Тогда создание сеанса искры будет выглядеть следующим образом

spark_session = SparkSession.builder.enableHiveSupport().getOrCreate()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...