gpt4 book ai didi

hadoop - AVRO 文件上的 Hive 外部表只为所有列生成 NULL 数据

转载 作者:可可西里 更新时间:2023-11-01 15:19:36 25 4
gpt4 key购买 nike

我正在尝试在使用 spark-scala 生成的一些 avro 文件之上创建一个 Hive 外部表。我正在使用 CDH 5.16,它有 hive 1.1spark 1.6

我创建了 hive 外部表,它运行成功。但是当我查询数据时,我得到所有列的 NULLMy problem is similar to this

经过一些研究,我发现这可能是模式的问题。但是我无法在该位置找到这些 avro 文件的架构文件。

我对 avro 文件类型还很陌生。有人可以帮我解决这个问题吗?

下面是我的 spark 代码片段,我将文件保存为 avro:

df.write.mode(SaveMode.Overwrite).format("com.databricks.spark.avro").save("hdfs:path/user/hive/warehouse/transform.db/prod_order_avro")

下面是我的 hive 外部表创建语句:

create external table prod_order_avro
(ProductID string,
ProductName string,
categoryname string,
OrderDate string,
Freight string,
OrderID string,
ShipperID string,
Quantity string,
Sales string,
Discount string,
COS string,
GP string,
CategoryID string,
oh_Updated_time string,
od_Updated_time string
)
STORED AS AVRO
LOCATION '/user/hive/warehouse/transform.db/prod_order_avro';

下面是我查询数据时得到的结果:从 prod_order_avro 中选择 *

Result

同时,当我使用 spark-scala 作为 dataframe 读取这些 avro 文件并打印它们时,我得到了正确的结果。下面是我用来读取这些数据的 spark 代码:

val df=hiveContext.read.format("com.databricks.spark.avro").option("header","true").load("hdfs:path/user/hive/warehouse/transform.db/prod_order_avro")

avro files data when read through spark-scala

我的问题是,

  • 在创建这些 avro 文件时,我是否需要更改我的 spark
    单独创建架构文件的代码,还是嵌入
    文件。如果需要分离,如何实现?
  • 如果不是如何创建hive 表以便从自动归档。我读到最新版本的 hive 会处理如果文件中存在模式,则此问题本身。

请帮帮我

最佳答案

解决了这个……这是一个架构问题。该模式未嵌入 avro 文件中。因此我不得不使用 avro-tools 提取模式并在创建表时传递它。它现在可以工作了。

我遵循了以下步骤:

  1. 从存储在 hdfs 中的 avro 文件中提取少量数据到一个文件中本地系统。下面是用于相同的命令:

    sudo hdfs dfs -cat/path/file.avro | head --bytes 10K >/path/temp.txt

  2. 使用 avro-tools getschema 命令从此数据中提取模式:

    avro-tools getschema/path/temp.txt

  3. 将生成的模式(它将以 json 数据的形式)复制到一个新的文件扩展名为.avsc并将其上传到HDFS

  4. 在创建 Hive 外部表 时向其添加以下属性:

    TBLPROPERTIES('avro.schema.url'='hdfs://path/schema.avsc')

关于hadoop - AVRO 文件上的 Hive 外部表只为所有列生成 NULL 数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57070236/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com