我已经使用Spark了几年了,我的新团队使用了Redshift。我已经成功绑定了火花/红移簇,可以通过Spark成功执行红移查询并将其卸载到S3中。
如果我正确理解,当我在Spark-Redshift中生成数据框时,实际的重量升级是由RedShift本身而不是Spark完成的。我在这两个平台上都运行了相同的查询,而火花中的查询则大约是两倍。由于在两种情况下都通过红移来解决查询本身,因此我相信额外的时间是从红移到激发簇的网络I/O。
spark(pyspark)确实是查询的收藏家,以方便的数据框架的形式,然后我可以将其用于与其库并并行化机器学习方法。
这个描述的准确性如何?
编辑:我进行了快速测试:在本地发射了Spark(16GB机器),并在约7.5亿张记录中进行了红移S-Spark查询,该记录返回了一个小的7x2 Dataframe(一个每天的一个,一个,分布其中的情况)。结果花了大约3秒钟的时间在我的Spark Shell中本地显示,并且在Redshift独立使用的情况下,查询完成了大约1.2秒。我的16GB计算机无法如此快速地处理这么多数据,并且监视CPU/网络显示查询期间的活动最少。除非我误解了某些东西,否则它看起来确实像是在红移,而不是火花,级别上进行的其他处理。
如果我正确理解,当我在Spark-Redshift中生成数据框时,实际的重量升级是由RedShift本身而不是Spark完成的。我
它不正确。Spark Data Source API可以将工作的一小部分(预测和简单过滤器)委托给外部源,但大部分工作都是在Spark本身上完成的。
整个过程非常丑陋:
- 火花执行查询。
- RedShift卸载查询对S3的结果。
- Spark读取来自S3的数据。