我创建了外部表,如下所示...
hive -e "create external table temp_db.temp_table (a char(10), b int) PARTITIONED BY (PART_DATE VARCHAR(10)) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' STORED AS TEXTFILE LOCATION '/work/temp_db/temp_table'"
我在IntelliJ IDEA中将scala与saveAsTextFile()一起使用,如下所示... itemsRdd.map(_.makeTsv).saveAsTextFile("hdfs://work/temp_db/temp_table/2016/07/19")
因此文件(以“ \ t”结尾的字段)位于 /work/temp_db/temp_table/2016/07/19. hadoop fs -ls /work/temp_db/temp_table/2016/07/19/part-00000 <- data file..
但是,我检查了hiveql,没有如下数据。 hive -e "select count(*) from temp_db.temp_table" -> 0. hive -e "select * from temp_db.temp_table limit 5" -> 0 rows fetched.
帮我该怎么办。谢谢。
您将火花保存在错误的位置。分区目录名称紧随其后part_col_name=part_value
。
在Spark中:将文件保存part_date=2016%2F07%2F19
在temp_table
dir下的目录中
itemsRdd.map(_.makeTsv)
.saveAsTextFile("hdfs://work/temp_db/temp_table/part_date=2016%2F07%2F19")
添加分区:您将需要添加应更新配置单元表的元数据的分区(我们从spark创建的分区目录为配置单元预期key=value
格式)
alter table temp_table add partition (PART_DATE='2016/07/19');
[cloudera@quickstart ~]$ hadoop fs -ls /user/hive/warehouse/temp_table/part*|awk '{print $NF}'
/user/hive/warehouse/temp_table/part_date=2016%2F07%2F19/part-00000
/user/hive/warehouse/temp_table/part_date=2016-07-19/part-00000
查询分区数据:
hive> alter table temp_table add partition (PART_DATE='2016/07/19');
OK
Time taken: 0.16 seconds
hive> select * from temp_table where PART_DATE='2016/07/19';
OK
test1 123 2016/07/19
Time taken: 0.219 seconds, Fetched: 1 row(s)
hive> select * from temp_table;
OK
test1 123 2016/07/19
test1 123 2016-07-19
Time taken: 0.199 seconds, Fetched: 2 row(s)
对于“日常”流程:您可以像这样运行saprk作业-只需在saveAsTextFile()
,之后添加分区,并注意s
inalter
语句即可。它需要在Spark的Hive SQL中传递变量:
val format = new java.text.SimpleDateFormat("yyyy/MM/dd")
vat date = format.format(new java.util.Date())
itemsRDD.saveAsTextFile("/user/hive/warehouse/temp_table/part=$date")
val hive = new HiveContext(sc)
hive.sql(s"alter table temp_table add partition (PART_DATE='$date')")
注意:保存文件后添加分区,否则spark将抛出目录已存在的异常,因为hive在添加分区时会创建目录(如果不存在)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句