我们有很多Json日志,并希望构建我们的Hive数据仓库。将Json日志放入spark schemaRDD很容易,而且schemaRDD有一个saveAsTable方法,但它只适用于从HiveContext创建的schemaRDD,而不适用于常规SQLContext。当我尝试使用从Json文件创建的schemaRDD saveAsTable时抛出异常。有没有办法强迫它“绑定”#39;使用HiveContext并将其保存到Hive中?我没有看到有任何明显的原因无法完成。我知道有一些选项,比如saveAsParquetFile用于数据持久性,但我们真的想利用Hive。
答案 0 :(得分:1)
那么,您确实在SchemaRDD中拥有数据吗? 您可以使用
在hive上下文中注册JSON RDDhc.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已经很好地支持了这一点。