Hive 将Spark SchemaRDD保存到配置单元数据仓库中

Hive 将Spark SchemaRDD保存到配置单元数据仓库中,hive,apache-spark,Hive,Apache Spark,我们有很多Json日志,希望构建我们的Hive数据仓库。将Json日志放入spark schemaRDD很容易,schemaRDD有一个saveAsTable方法,但它只适用于从HiveContext创建的schemaRDDs,而不是从常规SQLContext创建的schemaRDDs。当我尝试使用从Json文件创建的schemaRDD保存Astable时,它抛出异常。有没有办法强制它与HiveContext“绑定”并将其保存到Hive中?我不认为有任何明显的理由不能做到。我知道有一些选项,比如

我们有很多Json日志,希望构建我们的Hive数据仓库。将Json日志放入spark schemaRDD很容易,schemaRDD有一个saveAsTable方法,但它只适用于从HiveContext创建的schemaRDDs,而不是从常规SQLContext创建的schemaRDDs。当我尝试使用从Json文件创建的schemaRDD保存Astable时,它抛出异常。有没有办法强制它与HiveContext“绑定”并将其保存到Hive中?我不认为有任何明显的理由不能做到。我知道有一些选项,比如用于数据持久性的SaveAspQuetFile,但我们确实希望利用Hive。

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

那么,您的数据是否存在于SchemaRDD中? 您可以使用在配置单元上下文中注册JSON RDD

hc.RegisterRDatable(rdd,“myjsontable”)

“myjsontable”现在只存在于配置单元上下文中,数据仍然没有保存在其中。 然后你可以做类似的事情

sql(“将表myhivejsontable创建为SELECT*fromMyJSontable”)

这将实际在配置单元中创建表。 您实际需要以什么格式存储它?我建议使用拼花地板,因为柱状存储将更有效地进行查询。 如果您想将其存储为JSON,可以使用Hive SerDe(我在这里写了一个)


我写了一篇关于在Spark中创建嵌套数据并将其加载到Hive的短文,这是针对parquet的,不是针对json的,但可能会有所帮助:

我发现Spark的数据源API很棒。它可以使用现有的配置单元元存储来持久化具有外部数据的表。