【发布时间】:2016-12-10 03:26:24
【问题描述】:
我在 Spark 下创建了 ORC 格式的数据,如下所示:
var select: String = "SELECT ..."
sqlContext.sql(select).write.format("orc").save("/tmp/out/20160101")
select = "SELECT ..."
sqlContext.sql(select).write.format("orc").save("/tmp/out/20160102")
& so on...
现在我正在尝试在 Hive 中创建一个外部表,如下所示:
CREATE EXTERNAL TABLE `mydb.mytable`
(`col1` string,
`col2` decimal(38,0),
`create_date` timestamp,
`update_date` timestamp)
PARTITIONED BY (`my_date` string)
STORED AS ORC
LOCATION '/tmp/out/';
当我这样做时:
"select count(*) from mydb.mytable"
我得到计数值为 0。 但是在 Spark-shell 下,当我运行时:
val results = sqlContext.read.format("orc").load("/tmp/out/*/part*")
results.registerTempTable("results")
sqlContext.sql("select count(*) from results").show
我按预期获得了 500,000 行。
似乎“分区”没有被识别或其他东西。如何在 Spark 中创建的数据之上创建“外部”Hive 表?
【问题讨论】:
-
您告诉 hive 在
/tmp/out/my_date=<date>中查找数据,但在 spark 中您正在保存到/tmp/out/<date> -
嗯...如何告诉 Hive 查看 /tmp/out/
而不是 /tmp/out/my_date= ?我宁愿不改变输出位置。 -
据我所知你没有。
<column_name>=<value>是 hive 分区目录名称的格式。更改 spark 的输出以符合此要求。
标签: scala hadoop apache-spark hive orc