我们在spark上使用hive,我们想在hive上做任何事情,并使用spark来计算。这意味着我们不需要编写map/reduce代码,只需要编写类似sql的代码。
现在我们遇到了一个问题,我们想读取像postgresql这样的数据源,并通过简单的sql代码来控制它。我们希望它在集群上运行。
我有一个想法,我可以编写一些hiveudf来连接到jdbc并生成一个类似于表的数据,但是我发现它不能在spark作业上运行,那么它就没用了。
我们想要的是像这样在Hive中输入:
hive>select myfunc('jdbc:***://***','root','pw','some sql here');
然后我就可以在 hive 里找一张table,让它和其他人一起。另一方面,无论hive使用什么引擎,我们都希望读取hive中的其他数据源。
我不知道现在该怎么办,也许有人能给我一些建议。
有任何方法可以这样做:
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(...)
1条答案
按热度按时间q5lcpyga1#
我认为将数据从db加载到dataframe更容易,如果需要的话可以将其转储到hive。请阅读以下内容:https://spark.apache.org/docs/2.2.0/sql-programming-guide.html#jdbc-到其他数据库
查看属性名dbtable,可以加载sql query中定义的表的一部分。