Spark Sql - Ошибка вставки во внешнюю таблицу улья - PullRequest
0 голосов
/ 04 октября 2018

Я пытаюсь вставить данные во внешнюю таблицу кустов через spark sql.Мой стол в улье разбит на колонки.Запрос для создания внешней таблицы кустов выглядит так:

create external table tab1 ( col1 type,col2 type,col3 type) clustered by (col1,col2) sorted by (col1) into 8 buckets stored as parquet

Теперь я попытался сохранить данные из файла паркета (сохраненные в формате hdf) в таблицу.Это мой код

    SparkSession session = SparkSession.builder().appName("ParquetReadWrite").
                    config("hive.exec.dynamic.partition", "true").
                    config("hive.exec.dynamic.partition.mode", "nonstrict").
                    config("hive.execution.engine","tez").
                    config("hive.exec.max.dynamic.partitions","400").
                    config("hive.exec.max.dynamic.partitions.pernode","400").
                    config("hive.enforce.bucketing","true").
                    config("optimize.sort.dynamic.partitionining","true").
                    config("hive.vectorized.execution.enabled","true").
                    config("hive.enforce.sorting","true").
                    enableHiveSupport()
                    .master(args[0]).getOrCreate();
String insertSql="insert into tab1 select * from"+"'"+parquetInput+"'";

session.sql(insertSql);
  1. Когда я запускаю код, он выдает ошибку ниже

    несоответствующий ввод '' hdfs: // url: port / user /clsadmin / somedata.parquet '' ожидающий (строка 1, позиция 50)

    == SQL == вставить в UK_DISTRICT_MONTH_DATA select * from 'hdfs: // url: порт / пользователь / clsadmin / somedata.parquet' -------------------------------------------------- ^^^

    at org.apache.spark.sql.catalyst.parser.ParseException.withCommand(ParseDriver.scala:239)
    at org.apache.spark.sql.catalyst.parser.AbstractSqlParser.parse(ParseDriver.scala:115)
    at org.apache.spark.sql.execution.SparkSqlParser.parse(SparkSqlParser.scala:48)
    
  2. В чем разница между использованием механизма исполнения улья в качестве Tez и Spark?

Ответы [ 2 ]

0 голосов
/ 04 октября 2018

Создание внешней таблицы в Hive, необходимо указать местоположение HDFS.

create external table tab1 ( col1 type,col2 type,col3 type) 
clustered by (col1,col2) sorted by (col1) into 8 buckets 
stored as parquet 
LOCATION hdfs://url:port/user/clsadmin/tab1

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

* == SQL == вставить в UK_DISTRICT_MONTH_DATA select * from 'hdfs: // url: port / user / clsadmin / somedata.parquet '-------------------------------------------------- ^^^ ** ​​1007 *

parquetInput - путь к файлу партера HDFS, а не имя таблицы Hive.Отсюда и ошибка.

Существует два способа решения этой проблемы:

  1. Определите внешнюю таблицу для "parquetInput" и дайте имя таблицы
  2. Использование LOAD DATA INPATH 'hdfs://url:port/user/clsadmin/somedata.parquet' INTO TABLE tab1
0 голосов
/ 04 октября 2018

Вы пробовали

ЗАГРУЗИТЬ ЛОКАЛЬНЫЕ ВХОДЫ ДАННЫХ '/ путь / к / данным'

ПЕРЕЗАПИСАТЬ В СТОЛ имя таблицы;

...