Spark如何与Redshift交互?

时间:2016-12-09 17:13:06

标签: apache-spark pyspark apache-spark-sql amazon-redshift

我已经使用Spark几年了,我的新团队使用Redshift。我已经成功绑定了Spark / Redhshift集群,并且可以通过Spark成功执行Redshift查询并将它们卸载到S3中。

如果我理解正确的话,当我在spark-redshift中生成数据帧时,实际的繁重工作是由Redshift本身完成的,而不是Spark。我在两个平台上都运行相同的查询,而Spark中的查询大约需要两倍。由于在两种情况下Redshift都在解析查询本身,我相信额外的时间是从redshift到Spark集群的网络I / O.

Spark(pyspark)实际上只是一个查询收集器,它以一种方便的数据帧的形式出现,然后我可以用它来将机器学习方法与它的库并行化。

这种描述有多准确?

编辑:我做了一个快速测试:在本地启动了Spark(16Gb机器)并在大约7.5亿条记录中运行了一个redshift-spark查询,这些记录返回了一个小的7x2数据帧(一周中每天一个,分布为案件)。结果在我的Spark shell中本地显示大约花了3秒钟,查询在Redshift独立版上完成大约需要1.2秒。我的16Gb机器无法如此快速地处理那么多数据,并且监控CPU /网络显示查询期间的活动最少。除非我误解了某些内容,否则看起来真的看起来是重型聚合和其他处理是在Redshift而不是Spark级别完成的。

1 个答案:

答案 0 :(得分:1)

  

如果我理解正确的话,当我在spark-redshift中生成数据帧时,实际的繁重工作是由Redshift本身完成的,而不是Spark。我

它不正确。 Spark Data Source API可以将作业的一小部分(投影和简单过滤器)委托给外部源,但大部分工作都是在Spark本身完成的。

整个过程非常难看:

  • Spark执行查询。
  • Redshift UNLOADS查询到S3的结果。
  • Spark从S3读取数据。