首页 文章

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

提问于
浏览
4

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

2 回答

  • 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/

  • 0

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

相关问题