我在scala有我的spark项目,我想使用redshift作为我的数据仓库,我发现spark redshift repo存在,但databricks从几年前就把它私有化了,不再公开支持它。现在处理amazon redshift和spark(scala)的最佳选择是什么
eimct9ow1#
这是一个部分的答案,因为我只在现实世界的用例中使用了spark->redshift,从来没有对从redshift性能读取的spark进行过基准测试。当谈到从spark到redshift的写入时,到目前为止,我能找到的最有效的方法是将parquet写入s3,然后使用redshift copy加载数据。通过jdbc编写redshift也可以,但是它比前一种方法慢几个数量级。其他存储格式也可以尝试,但如果任何面向行的格式都能胜过parquet,我会感到惊讶,因为redshift在内部以列格式存储数据。spark和redshift都支持的另一种列格式是orc。我从未遇到过使用spark从redshift读取大量数据的用例,因为将所有数据加载到redshift并将其用于连接和聚合感觉更自然。仅仅将redshift用作大容量存储并使用另一个引擎进行连接和聚合可能不经济。对于读取少量数据,jdbc工作正常。对于大型读取,我最好的猜测是unload命令和s3。
1条答案
按热度按时间eimct9ow1#
这是一个部分的答案,因为我只在现实世界的用例中使用了spark->redshift,从来没有对从redshift性能读取的spark进行过基准测试。
当谈到从spark到redshift的写入时,到目前为止,我能找到的最有效的方法是将parquet写入s3,然后使用redshift copy加载数据。通过jdbc编写redshift也可以,但是它比前一种方法慢几个数量级。其他存储格式也可以尝试,但如果任何面向行的格式都能胜过parquet,我会感到惊讶,因为redshift在内部以列格式存储数据。spark和redshift都支持的另一种列格式是orc。
我从未遇到过使用spark从redshift读取大量数据的用例,因为将所有数据加载到redshift并将其用于连接和聚合感觉更自然。仅仅将redshift用作大容量存储并使用另一个引擎进行连接和聚合可能不经济。对于读取少量数据,jdbc工作正常。对于大型读取,我最好的猜测是unload命令和s3。