Spark 2.2 Ошибка экономичного сервера на фрейме данных NumberFormatException при запросе таблицы Hive

У меня Hortonworks HDP 2.6.3 под управлением Spark2 (v2.2). Мой тестовый пример очень прост:

  1. Создайте таблицу Hive с некоторыми случайными значениями. Улей в порту 10000

  2. Включите Spark Thrift сервер на 10016

  3. Запустите pyspark и запросите таблицу Hive через 10016

Однако мне не удалось получить данные от Spark из-за NumberFormatException.

Вот мой тестовый пример:

  1. Создать таблицу Hive с образцами строк:
beeline> !connect jdbc:hive2://localhost:10000/default hive hive

create table test1 (id int, desc varchar(40));

insert into table test1 values (1,"aa"),(2,"bb");
  1. Запустите Spark Thrift сервер:

su - spark -c '/usr/hdp/2.6.3.0-235/spark2/sbin/start-thriftserver.sh - мастер-пряжа-клиент --executor-memory 512м --hiveconf hive.server2.thrift.port=10016'

  1. Запустите pyspark от имени пользователя spark su - spark -c 'pyspark'

  2. Введите ниже код:

    df = sqlContext.read.format ("jdbc"). options (driver = "org.apache.hive.jdbc.HiveDriver", url = "jdbc: hive2: // localhost: 10016 / default", dbtable = "test1", пользователь = "улей", пароль = "улей"). load ()

    df.select ("*"). показать ()

  3. Я получил эту ошибку:

17/12/15 08:04:13 ОШИБКА Исполнитель: Исключение в задаче 0.0 на этапе 2.0 (TID 2) java.sql.SQLException: Невозможно преобразовать столбец 1 в integerjava.lang.NumberFormatException: Для входной строки: "id" в org " $JdbcUtils$$makeGetter$6.apply(JdbcUtils.scala:394) в org.apache.spark.sql.execution.datasources.jdbc.JdbcUtils$$anonfun$org$apache$spark$sql$ выполнение $ источники данных $jdbUs Jdbcs $ $$makeGetter$6.apply(JdbcUtils.scala:393) в org.apache.spark.sql.execution.datasources.jdbc.JdbcUtils$$anon$1.getNext(JdbcUtils.scala:330) в org.apache.spark.sql.execution.datasources.jdbc.JdbcUtils$$anon$1.getNext(JdbcUtils.scala:312) в org.apache.spark.util.NextIterator.hasNext(NextIterator.scala:73) в org.apache.spark.InterruptibleIt. (InterruptibleIterator.scala:37) в org.apache.spark.util.CompletionIterator.hasNext(CompletionIterator.scala:32) в org.apache.spark.sql.catalyst.expressions.GeneratedClass$GeneratedIterator.processNext(неизвестный источник) в org.apache.spark.sql.execution.BufferedRowIterator.hasNext(BufferedRowIterator.java)) в org.apache.spark.sql.execution.WholeStageCodegenExec$$anonfun$8$$anon$1.hasNext(WholeStageCodegenExec.scala:395) в org.apache.spark.sql.execution.SparkPlan$$anonfunP 2.lanly Splan.scala:234) в org.apache.spark.sql.execution.SparkPlan$$anonfun$2.apply(SparkPlan.scala:228) в org.apache.spark.rdd.RDD$$anonfun$mapPartitionsInternal$1$$anonfun$ применить $25.apply(RDD.scala:827) в org.apache.spark.rdd.RDD$$anonfun$mapPartitionsInternal$1$$anonfun$ применить $25.apply(RDD.scala:827) в org.apache.spark.rdd.MapPartitionsRDD.compute(MapPartitionsRDD.scala:38) в org.apache.spark.rdd.RDD.computeOrReadCheckpoint(RDD.scala:323) в org.apache.spark.rdd.RDD.iterator(RDD.scala:287) в org.apache.spark.scheduler.ResultTask.runTask(ResultTask.scala:87) в org.apache.spark.scheduler.Task.run(Task.scala:108) в org.apache.spark.executor.Executor$TaskRunner.run(Executor.scala:338) в java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) в java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) в java.lang.Thread.run(Thread.java:745) Причина: java.lang.NumberFormatException: Для входной строки: "id" в java.lang.NumberFormatException.forInputString(NumberFormatException.java:65) в java.lang.Integer.parseInt(Integer.java:580) в java.lang.Integer.valueOf(Integer.java:766) в org.apache.hive.jdbc.HiveBaseResultSet.getInt(HiveBaseResultSet.java:346) ... еще 23 17/12/15 08:04:13 WARN TaskSetManager: потерянное задание 0.0 на этапе 2.0 (TID 2, localhost, драйвер исполнителя): java.sql.SQLException: Невозможно преобразовать столбец 1 в integerjava.lang.NumberFormatException: для входной строки: "id" в org.apache.hive.jdbc.HiveBaseResultSet.getInt(HiveBaseResultSet.java:351) в org.apache.spark.sql. execution.datasources.jdbc.JdbcUtils $$ ано nfun $ org $ apache $ spark $ sql $ выполнение $ источники данных $jdbc$JdbcUtils$$makeGetter$6.apply(JdbcUtils.scala:394) в org.apache.spark.sql.execution.datasources.jdbc.JdbcUtils $$ anonfun org $ apache $ spark $ sql $ выполнение $ источники данных $jdbc$JdbcUtils$$makeGetter$6.apply(JdbcUtils.scala:393) в org.apache.spark.sql.execution.datasources.jdbc.JdbcUtils $$ anon $ 1.getNe (JdbcUtils.scala: 330) в org.apache.spark.sql.execution.datasources.jdbc.JdbcUtils$$anon$1.getNext(JdbcUtils.scala:312) в org.apache.spark.util.NextIterator.hasNext Next (.scala: 73) в org.apache.spark.InterruptibleIterator.hasNext(InterruptibleIterator.scala:37) в org.apache.spark.util.CompletionIterator.hasNext (CompletionIterator.scala: 32) в org.apache.spark.sql. катализатор.expressions.GeneratedClass $ GeneratedIterator.processNext (Неизвестный источник) в org.apache.spark.sql.execution.BufferedRowIterator.hasNext(BufferedRowIterator.java:43) в org.apache.spark.sql.execution.WholeStageCodeonunec $$ Анон $ 1.hasNext (WholeStageCodegenEx ec.scala: 395) в org.apache.spark.sql.execution.SparkPlan$$anonfun$2.apply(SparkPlan.scala:234) в org.apache.spark.sql.execution.SparkPlan$$anonfun$2.apply(SparkPlan.scala:228) в org.apache.spark.rdd.RDD$$anonfun$mapPartitionsInternal$1$$anonfun$apply$25.apply(RDD.scala:827) в org.apache.spark.rdd.RDD$$anonfun$mapPartitionsInternal$1$$anonfun$apply$25.apply(RDD.scala:827) в org.apache.spark.rdd.MapPartitionsRDD.compute(MapPartitionsRDD.scala:38) в org.apache.spark.rdd.RDD.computeOrReadChepoint RDD.scala: 323) в org.apache.spark.rdd.RDD.iterator(RDD.scala:287) в org.apache.spark.scheduler.ResultTask.runTask(ResultTask.scala:87) в org.apache.spark.scheduler.Task.run (Task.scala: 108) в org.apache.spark.executor.Executor$TaskRunner.run(Executor.scala:338) в java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) в java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) в java.lang.Thread.run(Thread.java:745) Причина: java.lang.N umberFormatException: для входной строки: "id" в java.lang.NumberFormatException.forInputString(NumberFormatException.java:65) в java.lang.Integer.parseInt(Integer.java:580) в java.lang.Integer.valueOf (целое число. Java:766) at org.apache.hive.jdbc.HiveBaseResultSet.getInt(HiveBaseResultSet.java:346) ... еще 23

17.12.15 08:04:14 ОШИБКА TaskSetManager: Задача 0 на этапе 2.0 не выполнена 1 раз; прерывание задания Traceback (последний вызов был последним): файл "", строка 1, в файле "/usr/hdp/current/spark2-client/python/pyspark/sql/dataframe.py", строка 336, в show print(self._jdf.showString(n, 20)) Файл "/usr/hdp/current/spark2-client/python/lib/py4j-0.10.4-src.zip/py4j/java_gateway.py", строка 1133, в файле вызова "/usr/hdp/current/spark2-client/python/pyspark/sql/utils.py", строка 63, в файле deco, возвращающем f(*a, **kw) файл "/usr/hdp/current/spark2-client/python/lib/py4j-0.10.4-src.zip/py4j/protocol.py", строка 319, в get_return_value py4j.protocol.Py4JJavaError: Произошла ошибка при вызове o75.showString.: org.apache.spark.SparkException: задание прервано из-за сбоя этапа: задание 0 на этапе 2.0 не выполнено 1 раз, последний сбой: потерянное задание 0.0 на этапе 2.0 (TID 2, localhost, драйвер исполнителя): java.sql.SQLException: Невозможно преобразовать столбец 1 в integerjava.lang.NumberFormatException: Для входной строки: "id" в org.apache.hive.jdbc.HiveBaseResultSet.getInt(HiveBaseResultSet.java:351) в org.apache.spark.sql.execution.datasources.jdbc.JdbcUtils$$anonfun$org$apache$spark$sql$ выполнение $ источники данных $jdbc$JdbcUtils$$makeGetter$6.apply(JdbcUtils.scala:394) в org.apache.spark.sql.execution.dbasources.j.JdbcUtils $$ anonfun $ org $ apache $ spark $ sql $ выполнение $ источники данных $jdbc$JdbcUtils$$makeGetter$6.apply(JdbcUtils.scala:393) в org.apache.spark.sql.execution.datasources.jdbtilJ $$ anon $ 1.getNext (JdbcUtils.scala: 330) в org.apache.spark.sql.execution.datasources.jdbc.JdbcUtils$$anon$1.getNext(JdbcUtils.scala:312) в org.apache.spark.util.NextIterator.hasNext(NextIterator.scala:73) в org.apache.spa rk.InterruptibleIterator.hasNext (InterruptibleIterator.scala:37) в org.apache.spark.util.CompletionIterator.hasNext (CompletionIterator.scala: 32) в org.apache.spark.sql.catalyst.expressions.Generatedxtlass Генерируемый $ Неизвестный источник) в org.apache.spark.sql.execution.BufferedRowIterator.hasNext(BufferedRowIterator.java:43) в org.apache.spark.sql.execution.WholeStageCodegenExec $$ anonfun $ 8 $$ anon $ 1.hasNext (WholeStage): 395) в org.apache.spark.sql.execution.SparkPlan$$anonfun$2.apply(SparkPlan.scala:234) в org.apache.spark.sql.execution.SparkPlan$$anonfun$2.apply(SparkPlan.scala:228) в org.apache.spark.rdd.RDD$$anonfun$mapPartitionsInternal$1$$anonfun$apply$25.apply(RDD.scala:827) в org.apache.spark.rdd.RDD$$anonfun$mapPartitionsInternal$1$$anonfun$apply$25.apply(RDD.scala:827) в org.apache.spark.rdd.MapPartitionsRDD.compute(MapPartitionsRDD.scala:38) в org.apache.spark.rdd.RDD.computeOrReadCheckpoint(RDD.scala:323) в org.apache.spark.rdd.RDD.iterat или (RDD.scala: 287) в org.apache.spark.scheduler.ResultTask.runTask(ResultTask.scala:87) в org.apache.spark.scheduler.Task.run (Task.scala: 108) в org.apache.spark.executor.Executor$TaskRunner.run(Executor.scala:338) в java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) в java.util.concurrent.ThreadPoolExecutor $ Threadj.un:617) at java.lang.Thread.run(Thread.java:745). Вызывается: java.lang.NumberFormatException: для входной строки: "id" в java.lang.NumberFormatException.forInputString(NumberFormatException.java:65) в java.lang.Integer.parseInt(Integer.java:580) в java.lang.Integer.valueOf(Integer.java:766) в org.apache.hive.jdbc.HiveBaseResultSet.getInt (HiveBaseResultSet.java:346).. Еще 23

Отслеживание стека драйверов: в org.apache.spark.scheduler.DAGScheduler.org$apache$spark$ планировщик $DAGScheduler$$failJobAndIndependentStages(DAGScheduler.scala:1517) в org.apache.spark.scheduler.DAGScheduler$$anonfun$. применить (DAGScheduler.scala:1505) в org.apache.spark.scheduler.DAGScheduler$$anonfun$abortStage$1.apply(DAGScheduler.scala:1504) в scala.collection.mutable.ResizableArray$class.foreach(ResizableArray.scala:59) в scala.collection.mutable.ArrayBuffer.foreach(ArrayBuffer.scala:48) в org.apache.spark.scheduler.DAGScheduler.abortStage(DAGScheduler.scala:1504) в org.apache.spark.scheduler.DAGScheduler$$anonfun$handleTaskSetFailed$1.apply(DAGScheduler.scala:814) в org.apache.spark.scheduler.DAGScheduler$$anonfun$handleTaskSetFailed$1.apply(DAGScheduler.scala:814) в scala.Optionscalaach 25 (опция: опция 7: 25)) в org.apache.spark.scheduler.DAGScheduler.handleTaskSetFailed(DAGScheduler.scala:814) в org.apache.spark.scheduler.DAGSchedulerEventProcessLoop.doOnReceive(DAGScheduler.scala:1732) в org.apache.spark.scheduler.DAGSchedulerEventProcessLoop.onReceive(DAGScheduler.scala:1687) в org.apache.spark.scheduler.DAGSchedulerEventProcessLoop.onReceive(DAGScheduler.scala:1676u) или org..EventLoop$$anon$1.run(EventLoop.scala:48) в org.apache.spark.scheduler.DAGScheduler.runJob(DAGScheduler.scala:630) в org.apache.spark.SparkContext.runJob(SparkContext.scala:2029) в org.apache.spark.SparkContext.runJob(SparkContext.scala:2050) в org.apache.spark.SparkContext.runJob(SparkContext.scala:2069) в org.apache.spark.sql.execution.SparkPlan.execuT (SparkPlan.scala:336) в org.apache.spark.sql.execution.CollectLimitExec.executeCollect(limit.scala:38) в org.apache.spark.sql.Dataset.org$apache$spark$sql$ Набор данных $$collectFromPlan(Dataset.scala:2854) в org.apache.spark.sql.Dataset$$anonfun$head$1.apply(Dataset.scala:2154) в org.apache.spark.sql.Dataset$$anonfun$head$1.apply(Dataset.scala:2154) в org.apache.spark.sql.Dataset$$anonfun$55.apply(Dataset.scala:2838) в org.apache.spark.sql.execution.SQLExecution$.withNewExecutionId(SQLExecution.scala:65) в org.apache.spark.sql.Dataset.withAction(Dataset.scala:2837) в org.apache.spark.sql.Dataset.head(Dataset.scala:2154) в org.apache.spark.sql.Dataset.take(Dataset.scala:2367) в org.apache.spark.sql.Dataset.showString(Dataset.scala:245) в sun.reflect.NativeMethodAccessorImpl.invoke0(собственный метод) в sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) в sun.reflect.DelegatingMethodAccessorImplan.gho.jpgfj..Method.invoke(Method.java:498) в py4j.reflection.MethodInvoker.invoke(MethodInvoker.java:244) в py4j.reflection.ReflectionEngine.invoke(ReflectionEngine.java:357) в py4j.Gateway.invoke(Java:280) в py4j.commands.AbstractCommand.invokeMethod(AbstractCommand.java:132) в py4j.commands.CallCommand.execute(CallCommand.java:79) в py4j.GatewayConnection.run(GatewayConnection.java:214) в Java. языки.Thread.run (Thread.java:745) Причина: java.sql.SQLException: невозможно преобразовать столбец 1 в integerjava.lang.NumberFormatException: для входной строки: "id" в org.apache.hive.jdbc.HiveBaseResultSet.getInt(HiveBaseResultSet.java:351) в org.apache.spark.sql.execution.datasources.jdbc.JdbcUtils$$anonfun$org$apache$spark$sql$ выполнение $ источники данных $jdbc $ JdbcUtils $$ makeGetter $ app.jpg.scala:394) at org.apache.spark.sql.execution.datasources.jdbc.JdbcUtils$$anonfun$org$apache$spark$sql$ выполнение $ источники данных $jdbc $ JdbcUtils $$ makeGetter $ 6.apply (JdbcUtils.: 393) в org.apache.spark.sql.execution.datasources.jdbc.JdbcUtils$$anon$1.getNext(JdbcUtils.scala:330) в org.apache.spark.sql.execution.datasources.jdbc.JdbcUtils$$anon$1.getNext(JdbcUtils.scala:312) в org.apache.spark.util.NextIterator.hasNext(NextIterator.scala:73) в org.apache.spark.InterruptibleIterator.hasNext(InterruptibleIterator.scala:37) или apache.spark.util.CompletionIterator.hasNext (CompletionIterator.scala: 32) в o rg.apache.spark.sql.catalyst.expressions.GeneratedClass $ GeneratedIterator.processNext (неизвестный источник) в org.apache.spark.sql.execution.BufferedRowIterator.hasNext(BufferedRowIterator.java:43) в org.apache.spark.s.execution.WholeStageCodegenExec $$ anonfun $ 8 $$ anon $ 1.hasNext (WholeStageCodegenExec.scala: 395) в org.apache.spark.sql.execution.SparkPlan$$anonfun$2.apply(SparkPlan.scala:234) или.spark.sql.execution.SparkPlan $$ anonfun $ 2.apply (SparkPlan.scala: 228) в org.apache.spark.rdd.RDD$$anonfun$mapPartitionsInternal$1$$anonfun$ применить $25.apply(RDD.scala:827) в org.apache.spark.rdd.RDD$$anonfun$mapPartitionsInternal$1$$anonfun$apply$25.apply(RDD.scala:827) в org.apache.spark.rdd.MapPartitionsRDD.compute(MapPartitionsRDD.scala:38) в org.apache.spark.rdd.RDD.computeOrReadCheckpoint(RDD.scala:323) в org.apache.spark.rdd.RDD.iterator(RDD.scala:287) в org.apache.spark.scheduler.ResultTask.runTask(ResultTask.scala:87) в org.apache.spark.scheduler.Task.run (Task.scala: 108) в org. apache.spark.executor.Executor $ TaskRunner.run (Executor.scala: 338) в java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) в java.util.concurrent.ThreadPoolExecutor $ Worker.run java:617) ... еще 1 причина: java.lang.NumberFormatException: для входной строки: "id" в java.lang.NumberFormatException.forInputString(NumberFormatException.java:65) в java.lang.Integer.parseInt (Integer.java: 580) в java.lang.Integer.valueOf(Integer.java:766) в org.apache.hive.jdbc.HiveBaseResultSet.getInt (HiveBaseResultSet.java:346)... и еще 23

  1. Я подозревал, что это как-то связано с id столбец, поэтому я изменил на это: df.select ("desc"). show ()

  2. Тогда я получил этот странный результат:

+----+
|desc|
+----+
|desc|
|desc|
+----+
  1. Если я вернусь к Hive для запроса, все прошло нормально через порт 10016:
beeline> !connect jdbc:hive2://localhost:10016/default hive hive

select * from test1;

+-----+-------+--+
| id  | desc  |
+-----+-------+--+
| 1   | aa    |
| 2   | bb    |
+-----+-------+--+
  1. Если я изменю порт 10000 в pyspark, та же проблема сохранится.

Не могли бы вы помочь мне понять, почему и как получить строки через Spark?

ОБНОВЛЕНИЕ 1

Я следовал советам @Achyuth ниже в обоих случаях, и они все еще не работают.

Случай 1

Beeline:

create table test4 (id String, desc String);
insert into table test4 values ("1","aa"),("2","bb");
select * from test4;

Pyspark:

>>> df = sqlContext.read.format("jdbc").options(driver="org.apache.hive.jdbc.HiveDriver", url="jdbc:hive2://localhost:10016/default", dbtable="test4",user="hive", password="hive").option("fetchsize", "10").load()
>>> df.select("*").show()
+---+----+
| id|desc|
+---+----+
| id|desc|
| id|desc|
+---+----+

Почему-то он возвращался в названиях столбцов?!

Дело 2

Beeline:

create table test5 (id int, desc varchar(40)) STORED AS ORC;
insert into table test5 values (1,"aa"),(2,"bb");
select * from test5;

Pyspark:

Все та же ошибка Caused by: java.lang.NumberFormatException: For input string: "id"

ОБНОВЛЕНИЕ 2

Создайте таблицу и вставьте значения через порт Hive 10000, а затем запросите ее. Работает нормально через билайн

beeline> !connect jdbc:hive2://localhost:10000/default hive hive
Connecting to jdbc:hive2://localhost:10000/default
Connected to: Apache Hive (version 1.2.1000.2.5.3.0-37)
Driver: Hive JDBC (version 1.2.1000.2.5.3.0-37)
Transaction isolation: TRANSACTION_REPEATABLE_READ
0: jdbc:hive2://localhost:10000/default> create table test2 (id String, desc String) STORED AS ORC;
No rows affected (0.3 seconds)
0: jdbc:hive2://localhost:10000/default> insert into table test2 values ("1","aa"),("2","bb");
INFO  : Session is already open
INFO  : Dag name: insert into table tes..."1","aa"),("2","bb")(Stage-1)
INFO  : Tez session was closed. Reopening...
INFO  : Session re-established.
INFO  :

INFO  : Status: Running (Executing on YARN cluster with App id application_1514019042819_0006)

INFO  : Map 1: -/-
INFO  : Map 1: 0/1
INFO  : Map 1: 0(+1)/1
INFO  : Map 1: 1/1
INFO  : Loading data to table default.test2 from webhdfs://demo.myapp.local:40070/apps/hive/warehouse/test2/.hive-staging_hive_2017-12-23_04-29-54_569_601147868480753216-3/-ext-10000
INFO  : Table default.test2 stats: [numFiles=1, numRows=2, totalSize=317, rawDataSize=342]
No rows affected (15.414 seconds)
0: jdbc:hive2://localhost:10000/default> select * from table2;
Error: Error while compiling statement: FAILED: SemanticException [Error 10001]: Line 1:14 Table not found 'table2' (state=42S02,code=10001)
0: jdbc:hive2://localhost:10000/default> select * from test2;
+-----------+-------------+--+
| test2.id  | test2.desc  |
+-----------+-------------+--+
| 1         | aa          |
| 2         | bb          |
+-----------+-------------+--+
2 rows selected (0.364 seconds)

Также через Билайн я могу использовать Spark Thrift Server 10016, чтобы сделать то же самое, и он работал нормально:

beeline> !connect jdbc:hive2://localhost:10016/default hive hive
Connecting to jdbc:hive2://localhost:10016/default
1: jdbc:hive2://localhost:10016/default> create table test3 (id String, desc String) STORED AS ORC;
+---------+--+
| Result  |
+---------+--+
+---------+--+
No rows selected (1.234 seconds)
1: jdbc:hive2://localhost:10016/default> insert into table test3 values ("1","aa"),("2","bb");
+---------+--+
| Result  |
+---------+--+
+---------+--+
No rows selected (9.111 seconds)
1: jdbc:hive2://localhost:10016/default> select * from test3;
+-----+-------+--+
| id  | desc  |
+-----+-------+--+
| 1   | aa    |
| 2   | bb    |
+-----+-------+--+
2 rows selected (3.387 seconds)

Это означает, что Spark и Thrift Server работают нормально. Но используя pyspark У меня та же проблема, так как результаты пусты:

>>> df = sqlContext.read.format("jdbc").options(driver="org.apache.hive.jdbc.HiveDriver", url="jdbc:hive2://localhost:10016/default", dbtable="test3",user="hive", password="hive").load()
>>> df.select("*").show()
+---+----+
| id|desc|
+---+----+
+---+----+

ОБНОВЛЕНИЕ 3

ОПИСАТЬ РАСШИРЕННЫЙ test3;

# Detailed Table Information  | CatalogTable(
    Table: `default`.`test3`
    Owner: hive
    Created: Sat Dec 23 04:37:14 PST 2017
    Last Access: Wed Dec 31 16:00:00 PST 1969
    Type: MANAGED
    Schema: [`id` string, `desc` string]
    Properties: [totalSize=620, numFiles=2, transient_lastDdlTime=1514032656, STATS_GENERATED_VIA_STATS_TASK=true]
    Storage(Location: webhdfs://demo.myapp.local:40070/apps/hive/warehouse/test3, InputFormat: org.apache.hadoop.hive.ql.io.orc.OrcInputFormat, OutputFormat: org.apache.hadoop.hive.ql.io.orc.OrcOutputFormat, Serde: org.apache.hadoop.hive.ql.io.orc.OrcSerde, Properties: [serialization.format=1]))

ПОКАЗАТЬ СОЗДАТЬ СТОЛ test3;

CREATE TABLE `test3`(`id` string, `desc` string)
ROW FORMAT SERDE 'org.apache.hadoop.hive.ql.io.orc.OrcSerde'
WITH SERDEPROPERTIES (
  'serialization.format' = '1'
)
STORED AS
  INPUTFORMAT 'org.apache.hadoop.hive.ql.io.orc.OrcInputFormat'
  OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.orc.OrcOutputFormat'
TBLPROPERTIES (
  'totalSize' = '620',
  'numFiles' = '2',
  'transient_lastDdlTime' = '1514032656',
  'STATS_GENERATED_VIA_STATS_TASK' = 'true'
)

su - spark -c 'hdfs dfs -cat webhdfs: //demo.myapp.local: 40070 / apps / hive / warehouse / test3 / part-00000'

1 ответ

Решение

Даже если вы создаете таблицу кустов с определенным типом данных, базовые данные в таблице при вставке сохраняются в формате String.

Таким образом, когда искра пытается прочитать данные, она использует метасреду для поиска типов данных. Он присутствует как int в метасольве улья и как строка в файле, и он вызывает исключение приведения.

Решения

Создайте таблицу как строку и прочитайте из spark, она будет работать.

create table test1 (id String, desc String);

Если вы хотите сохранить тип данных, укажите один из форматов файлов, например orc или parquet, который создает таблицу, а затем вставьте его. Вы можете прочитать файл без искры без исключений

 create table test1 (id int, desc varchar(40) STORED AS ORC);

Теперь вопрос, почему улей может это прочитать? У куста есть хорошие варианты броска, доступные, в то время как у искры нет.

Просто решил это после нескольких часов поисков в Интернете!!!!(Нет интернета не помогло)

Поскольку я все еще новичок в Scala/Hive, я не могу дать хорошего объяснения. Но я решил это, добавив несколько внешних файлов jar(Hive JDBC), предоставленных AWS. И я также изменил параметр драйвера на "com.amazon.hive.jdbc41.HS2Driver".

Перейдите по следующей ссылке, чтобы загрузить драйверы, а также просмотреть образец кода.

http://awssupportdatasvcs.com/bootstrap-actions/Simba/latest/

Другие вопросы по тегам