我正在尝试Hive external table
在avro
使用spark-scala
. 我正在使用CDH 5.16
which has hive 1.1
, spark 1.6
.
我创建了hive external table
,运行成功。但是当我查询NULL
所有列的数据时。
我的问题与此类似
经过一些研究,我发现这可能是模式的问题。但是我在该位置找不到这些 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")
下面是我的配置单元外部表创建语句:
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';
以下是我查询数据时得到的结果:
select * from prod_order_avro
同时,当我使用as读取这些avro
文件并打印它们时,我得到了正确的结果。下面是我用来读取这些数据的代码:spark-scala
dataframe
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
文件时,我是否需要更改我的spark
代码以单独创建架构文件,或者将其嵌入
文件中。如果需要分开,那么如何实现呢? - 如果不是如何创建
hive
表,以便自动从文件中检索架构。我读到,如果文件中存在架构,则在最新版本中,hive 会自行解决此问题。
请在这里帮助我