笔记本驱动开发

资深Spark开发人员,请听我说! 您的Spark开发周期有多快? 慢? 真的慢吗? 您可以使用这个超级棒的模板来启用在IntelliJ中运行Spark作业,但是有时您会受到所处理数据的大小/位置的限制,并且发现每次重新运行都需要时间(这很宝贵)和有限等等,是的,这很重要。

您的技术人员可能会使用最可估计的工具REPL(读取-评估-处理-循环)来进行快速的命令行迭代。 这是一个好的开始。 我每天使用Scala REPL,主要用于验证正确的日期/时间格式和正则表达式测试。 将REPL与Spark结合使用,您没有启动/关闭SparkContext的开销,并且可以通过即时反馈(很酷)快速测试出事情。 而且,您可以使用console命令从SBT输入REPL,从而可以访问在该项目中构建的类/实用程序以及项目依赖项(非常酷)。

更好的方法

所以,是的,REPL很好,但是除了Apache Zeppelin之外,您甚至都可以更快,更快速地使用笔记本电脑。 Zeppelin(如Jupyter)使您可以在笔记本中编写可运行代码的片段,并从浏览器中执行它们。 Zeppelin与Jupyter的不同之处在于,它与Spark配合使用时的效果如何。 Spark是Zeppelin的默认解释器,并为您隐式提供spark和sql上下文。 您还可以免费获得出色的SQL查询可视化。

使用Zeppelin银行示例的简单SQL查询

带条形图和表单输入的简单SQL查询

使用Zeppelin,如果您要查询某个数据集并想了解其总大小,列的基数或简单的描述性统计信息,则可以使用简单的SQL查询从笔记本本身立即进行操作。 这听起来很琐碎,但通过在询问数据问题时提供紧密的反馈循环,而不必每次都重新加载(当您使用cache ),它绝对节省了您的时间和精力。 此外,您还可以免费获得Markdown的文档,Angular的数据可视化支持,Big Data生态系统中不断增长的模块生态系统以及对团队之间的协作和共享的简单支持。

我还认为Zeppelin可以帮助您编写更多可扩展的Spark代码。 在段落中编写代码强化了使方法尽可能小和简洁的想法。 一旦解决了这些代码块,构建代码库或多或少就是将这些块组成逻辑类或方法的问题。

齐柏林飞艇确实有它的缺点。 在实际代码和笔记本之间进行切换可能会很困难,因此您需要专用的探索上下文(Zeppelin)与精心设计解决方案(代码库)并坚持使用它们。 而且,依赖项管理太过手工。 我希望Zeppelin能够通过某种Vulcan思维或其他方式了解我的Spark工作所知道的一切(我是否正确使用了该术语?我不是Trekkie。个世代移走了。林格吗?

大创意科

最终,如果您是一个Spark开发人员,并且试图在合理的时间内构建可伸缩系统,那么我认为Zeppelin是一个很好的工具。 我认为笔记本是“下一步”。 我认为开发速度可能是软件工程流程的一大瓶颈,尤其是在处理大量数据时。 我还认为,最重要的是,任何一家具有适当规模的公司都需要一定水平的实用实时文档,以了解他们到底在做什么。

因为知识就是力量对吗? 所有这些“编码”,“文档”和“测试”是否只是代表知识的不同方式? 最终,知识只是一种工具,是实现某些目标的手段。 作为工程师,我们有责任使用最好的工具来实现目标。 我认为齐柏林飞艇就是这样一种工具。 我还认为,我们可以进一步推广这一思想,并最终达到我们编写的所有代码都是简单的块,可以以最小的开销轻松组合的点(为什么我们要在打包和部署上花费那么多时间?)。 还是我们在浪费时间,应该让AI为我们做些肮脏的工作? 谁知道,但是现在,我想我们继续…