我对spark不是很熟悉,所以如果这是navie,请原谅我。
我有一个hdfs数据湖要处理,可以通过hive和presto、impala和spark(在集群中)查询数据。
但是,spark没有内置的访问控制,出于安全原因,我只能使用hive/presto进行查询。
我的问题
我是否可以在本地安装spark(例如我的笔记本电脑),并使用jdbc连接数据源(hive或presto),如中所示https://spark.apache.org/docs/latest/sql-data-sources-jdbc.html ? 所以我可以使用pyspark的dataframe语法和python而不是sql来查询数据,这对我来说效率更高。
这与使用Pandas读取数据有何不同?在pandas中,数据直接加载到我的笔记本电脑中,因此我只能加载约1百万行数据,否则加载时间会太长。spark(本地安装)会将查询、限制和转换推送到数据源吗?否则,这种方法是没有用的。
使用presto(在集群中)和spark(本地机器)w/jdbc来实现presto的速度有什么不同?
谢谢!
1条答案
按热度按时间lymgl2op1#
是的,您可以在本地安装spark并使用jdbc连接到您的数据库。下面是一个帮助您连接到my sql的函数,您可以通过更改jdbc连接字符串将其推广到任何jdbc源代码:
spark比pandas更擅长处理大数据,即使在本地机器上也是如此,但由于并行性和分布式计算,spark会带来性能开销。在集群上,它肯定能满足您的需求,但是本地模式只能用于开发。
请放心,spark(本地安装)将推送查询、限制和转换限制,如果操作正确,甚至可以更好地处理它。由于df是一种无索引的分布式数据结构,搜索、排序和过滤操作的开销将非常大。
不知道普雷斯托和斯帕克之间的速度差异,也没有尝试过比较。
希望这有帮助。
注意:即使有最佳的并行工作负载,在本地机器上也不能保证性能的提高。它不提供分销机会。