我们在Spark上使用Hive,我们希望在蜂巢上做所有事情,并使用spark来计算。这意味着我们不需要编写map / reduce代码,而是编写类似sql的代码。
现在我们遇到了一个问题,我们想读取像postgresql这样的数据源,并通过简单的sql代码来控制它。我们希望它在集群上运行。
我有一个想法,我可以编写一些Hive udfs连接到jdbc并创建一个像数据一样的表,但是我发现它不能运行在spark工作上,然后它将毫无用处。
我们想要的是像这样键入hive:
hive>select myfunc('jdbc:***://***','root','pw','some sql here');
然后我可以在蜂巢中找到一张桌子,让它加入其他人。另一方面,无论使用何种引擎配置单元,我们都希望在配置单元中读取其他数据源。
我现在不知道该怎么做,也许有人可以给我一些建议。
有任何方法可以这样做:
hive> select * from hive_table where hive_table.id in
(select myfunc('jdbcUrl','user','pw','sql'));
我知道hive用于将sql编译为MapReduce作业,我想知道的是如何使我的sql / udf编译为MapReduce作业spark.read().jdbc(...)
答案 0 :(得分:0)
我认为将数据从db加载到数据帧更容易,然后可以根据需要将其转储到hive。 阅读:https://spark.apache.org/docs/2.2.0/sql-programming-guide.html#jdbc-to-other-databases
请参阅属性名称dbtable,您可以加载sql查询中定义的表的一部分。