我正在尝试通过创建 Spark 数据集,通过 java 中的 Spark 读取配置单元表。对于具有字符串标题的所有列,数据都能正确读取,但对于整数标题,spark 会获取与标题相同的列数据。该表是在 parquet 文件上创建的外部表。
我的 hive 表:
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)
数据集.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|
+------+---------+----------+---+---+---+------+--------+--------+
未正确获取具有整数标题名称的列。
这是由于任何 Spark 限制吗?
我的 Spark 版本:2.4.4 scala 2.11 配置单元版本:1.2.1000
最佳答案
无法使用 Spark 2.1 重现错误。
您可以尝试添加以下 Spark 配置吗?
--conf spark.sql.hive.convertMetastoreParquet=false
并加载您的数据:
spark.table("myTable").show
我尝试重现此错误时的结果:
+-----+---+---+
|a |b |123|
+-----+---+---+
|hello|1 |2 |
+-----+---+---+
打印模式:
root
|-- a: string (nullable = true)
|-- b: integer (nullable = true)
|-- 123: integer (nullable = true)
关于java - Spark数据集获取与整数列标题相同的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58874305/