将Spark SchemaRDD保存到Hive数据仓库中

时间:2014-09-15 05:21:06

标签: hive apache-spark

我们有很多Json日志,并希望构建我们的Hive数据仓库。将Json日志放入spark schemaRDD很容易,而且schemaRDD有一个saveAsTable方法,但它只适用于从HiveContext创建的schemaRDD,而不适用于常规SQLContext。当我尝试使用从Json文件创建的schemaRDD saveAsTable时抛出异常。有没有办法强迫它“绑定”#39;使用HiveContext并将其保存到Hive中?我没有看到有任何明显的原因无法完成。我知道有一些选项,比如saveAsParquetFile用于数据持久性,但我们真的想利用Hive。

2 个答案:

答案 0 :(得分:1)

那么,您确实在SchemaRDD中拥有数据吗? 您可以使用

在hive上下文中注册JSON RDD

hc.registerRDDasTable(RDD, “myjsontable”)

“myjsontable”现在只存在于hive上下文中,数据仍然没有保存在那里。 然后你可以做类似

的事情

hc.sql(“CREATE TABLE myhivejsontable AS SELECT * FROM myjsontable”)

实际上会在hive中创建你的表。 您实际需要以什么格式存储它?我推荐Parquet,因为柱状存储将更有效地进行查询。 如果你想把它存储为JSON你可以使用Hive SerDe(我在这里写了一个https://github.com/rcongiu/Hive-JSON-Serde

我写了一篇关于在Spark中创建嵌套数据并将其加载到Hive中的简短文章,它适用于镶木地板,不适用于json,但它可能有所帮助:http://www.congiu.com/creating-nested-data-parquet-in-spark-sql/

答案 1 :(得分:0)

正确的解决方案是在Hive中使用JSON SerDe和外部表,如果您有一些分区结构,还可以使用Hive架构更新脚本。 Hive已经很好地支持了这一点。