【发布时间】:2020-03-11 10:42:43
【问题描述】:
我正在尝试通过创建 spark 数据集在 java 中通过 spark 读取 hive 表。对于具有字符串标题的所有列,数据被正确读取,但对于整数标题,spark 获取与标题相同的列数据。该表是根据 parquet 文件创建的外部表。
我的蜂巢桌:
CREATE EXTERNAL TABLE `myTable`(`tester` int, `testfloat` double, `testfloat1` double, `1` double, `0` double, `455` int, `100341` int, `1String2` double, `1String3` int)
ROW FORMAT SERDE 'org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe'
WITH SERDEPROPERTIES (
'serialization.format' = '1'
)
STORED AS
INPUTFORMAT 'org.apache.hadoop.hive.ql.io.parquet.MapredParquetInputFormat'
OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.parquet.MapredParquetOutputFormat'
LOCATION 'file:/myFolderLocation/OfParquetFolder'
TBLPROPERTIES (
'transient_lastDdlTime' = '2174197412'
)
文件内容:
tester testFloat testFloat1 1 0 455 100341 1String2 1String3
1 1 1.2 1.2 1.2 1 -1 1 1
2 2 1.4 1.4 1.4 2 2 2
3 3.1 1.6 1.6 1.6 3 12 3 3
Hive 表创建正确,
1 1.0 1.2 1.2 1.2 1 -1 1.0 1
2 2.0 1.4 1.4 1.4 2 NULL 2.0 2
3 3.1 1.6 1.6 1.6 3 12 3.0 3
但是当我在其上创建 spark 数据集时, 数据集架构:
|-- tester: integer (nullable = true)
|-- testfloat: double (nullable = true)
|-- testfloat1: double (nullable = true)
|-- 1: double (nullable = true)
|-- 0: double (nullable = true)
|-- 455: integer (nullable = true)
|-- 100341: integer (nullable = true)
|-- 1string2: double (nullable = true)
|-- 1string3: integer (nullable = true)
dataset.show()
+------+---------+----------+---+---+---+------+--------+--------+
|tester|testfloat|testfloat1| 1| 0|455|100341|1string2|1string3|
+------+---------+----------+---+---+---+------+--------+--------+
| 1| 1.0| 1.2|1.0|0.0|455|100341| 1.0| 1|
| 2| 2.0| 1.4|1.0|0.0|455|100341| 2.0| 2|
| 3| 3.1| 1.6|1.0|0.0|455|100341| 3.0| 3|
+------+---------+----------+---+---+---+------+--------+--------+
没有正确获取具有整数标题名称的列。
这是由于任何火花限制吗?
我的火花版本:2.4.4 scala 2.11 蜂巢版本:1.2.1000
【问题讨论】:
标签: java scala apache-spark hive