【问题标题】:Spark dataset fetching data same as header for integer columnSpark数据集获取与整数列标题相同的数据
【发布时间】: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


    【解决方案1】:

    使用 Spark 2.1 无法重现您的错误。

    您可以尝试添加以下 Spark 配置吗?

    --conf spark.sql.hive.convertMetastoreParquet=false
    

    并加载您的数据:

    spark.table("myTable").show
    

    尝试重现此错误时的结果:

    +-----+---+---+
    |a    |b  |123|
    +-----+---+---+
    |hello|1  |2  |
    +-----+---+---+
    

    printedSchema:

    root
     |-- a: string (nullable = true)
     |-- b: integer (nullable = true)
     |-- 123: integer (nullable = true)
    

    【讨论】:

    • 嗨,我正在使用 java,我尝试使用 SparkSession.builder().appName("sampleRecords").master("local").config("spark.sql.hive.convertMetastoreParquet",假).getOrCreate();但它不起作用,也尝试了 sparkSession 的 enableHiveSupport(),但即使这样也不起作用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-16
    相关资源
    最近更新 更多