java - Spark数据集获取与整数列标题相同的数据

标签 java scala apache-spark hive

我正在尝试通过创建 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/

相关文章:

java - Spark 将数据集转换为 RDD

java - 构造函数中的 Action 监听器

java - 如何在 Eclipse 中导入 JSON Simple?

xml - 使用scala查找具有与特定值匹配的属性的所有节点

Scala:如何解构基本 map 条目

python - Spark/Python,reduceByKey() 然后找到前 10 个最常见的单词和频率

java - Spark MapwithState stateSnapshots 不缩放(Java)

java - onSensorChanged 和线程,Android

java - Spring Boot - 无法在 application.properties 的 xml 中解析属性

java - Scala 映射值扩展接口(interface)