云服务器价格_云数据库_云主机【优惠】最新活动-搜集站云资讯

云服务器_域名解析ip地址查询_限时特惠

小七 141 0

用Databricks开发apachespark Scala库

在数据库里试试这个笔记本电影《玩具总动员》是皮克斯于1995年发行的第一部长篇电脑动画电影。尽管动画师有专业的工作台,他们还是开始用手勾勒出故事的草图。皮克斯的所有电影至今仍沿用这一做法。无论何时开发apachespark应用程序,有时需要在全面开发它并将其交付生产之前对其进行概述。本博客将解释如何快速原型化一个为数据集市生成日期维度的笔记本,然后通过单元测试和发布过程将代码编入Scala库。先决条件在尝试复制这些说明之前,您需要确保在您的个人工作站上安装了一些东西:吉特Java(Spark 2.0版本8)马文斯卡拉SBT公司智能Databricks笔记本的原型就像《玩具总动员》是用手在纸上勾勒出来的一样,你可以使用Databricks笔记本快速地将自己的想法原型化。您可以编写几行代码,立即执行它们,可视化结果,然后进行迭代。只需几分钟就可以启动一个集群来运行您的代码,并且您将能够在对真实数据集进行测试的同时使您的程序快速进入工作状态。使用Databricks笔记本,我已经原型化了一些代码,这些代码将创建一个日期维度,我将在多个数据集市中使用。我使用Spark为100年的日期生成一个DataFrame,然后在从中创建Spark SQL表之前检查数据框的模式和内容,然后任何集群都可以从中查询或连接到它。(参见此处的笔记本)在IDE中创建项目一旦我有了一个我满意的工作原型,我就想把它生成为一个库,这样我就可以把它发布给其他团队,在他们自己的数据集市中使用。为此,我将首先在本地工作站上用IntelliJ创建一个新的Scala/SBT项目。如果您不熟悉IntelliJ,可以按照以下说明操作:打开IntelliJ并选择"createnewproject"并为项目选择"SBT"。设置javasdk和Scala版本以匹配Databricks上预期的apachespark环境。启用"自动导入"可以在将库添加到生成文件时自动导入库。要检查Databricks上的Apache Spark环境,请启动集群并查看Spark UI中的"Environment"选项卡:IntelliJ将为您和构建.sbt文件。继续打开构建.sbt文件。它应该类似于以下内容:接下来,将您的组织添加到构建文件中,并包含sparksql的库依赖项。无论何时包含Spark库的库依赖项,请确保使用%provided%。这将不包括编译后的JAR中的依赖项,因为当您将Databricks附加到群集。下面是一个例子构建.sbt文件现在应该是:名称:="数据集市"版本:="1.0"缩放:="2.11.8"组织:"com.databricks.blog"libraryDependencies++=序列("org.apache.spark网站"%"spark-sql_2.11"%""2.0.0"%""提供")如果您需要知道如何为librarydependency编写确切的字符串,可以从项目的Maven Central页面上的SBT选项卡查看它。确保Scala构建版本与Spark的正确版本相匹配。下面是scala2.11上的sparksql2.0示例。将原型代码重构为包当我建立我的原型时,我把所有的东西都写在一个笔记本上,以便快速测试。但是,在将其打包为库之前,我希望将代码模块化为单独的类和包。我创建了一个类DateDimension(源代码)。推送至Git回购现在是开始将我的代码库推到GitHub以开始跟踪更改的好时机。在此之前,您应该首先在项目根文件夹中创建一个.gitignore文件,以便排除特定于用户的文件。IntelliJ将为您的项目创建许多文件,这些文件不应推送到Git存储库。您可以通过在项目根目录下创建一个.gitignore文件来告诉git忽略这些文件。确保在文件名的开头包含句点(example.gitignore文件)。编译包库在源代码中创建了DateDimension类之后,我准备编译代码并将其打包到JAR文件中。如果您不熟悉SBT,您可以通过从项目根目录运行SBT package命令从终端进行操作。这将在./target文件夹下创建一个JAR文件:./target/scala-2.11/datamart_2.11-1.0.jar现在您可以使用这个JAR文件,在Databricks中创建一个库,将其附加到集群,将包导入到笔记本中并开始使用它。这些是很多手动步骤,所以在下一节中,我将向您展示如何自动执行这些步骤。自动部署到数据块一旦你开始用IntelliJ开发你的库,你可能会想要迭代代码,上传到Databricks,然后用你的笔记本重新测试。Databricks开发了一个SBT插件,使这个过程更加无缝。配置后,您可以运行一个命令来编译、上载、将库附加到一个命名集群,然后重新启动该集群。创建笔记本并链接到GitHub在将我的库附加到Databricks中的集群之后,我创建了一个新的笔记本,供一个作业使用,我可以安排它加载日期维度(请参阅此处的笔记本)。现在,让我们将此链接到GitHub repo:作为一个最佳实践,我将笔记本代码作为apachespark应用程序的入口点,并将其写入存储库中的某个位置,该位置与打包到JAR中的源代码路径是分开的。我喜欢把它写到./src/main/notebook使用我们内置的GitHub集成,可以很容易地将Databricks中的笔记本与存储库同步。关于如何这样做的完整说明可以在GitHub Databricks版本控制文档中找到。应用单元测试为了保证我的库的质量和可维护性,我必须创建每次构建时都可以运行的单元测试。为了做到这一点,我利用了开源的spark测试库SBT插件来简化代码测试。您可以按照以下说明在自己的代码中利用相同的插件:将以下条目添加到构建.sbt文件:"com.holdenkarau公司"%%"火花测试基"%""2.0.0_0.4.7"%""测试"将以下行添加到构建.sbt文件:测试中的并行执行:=false您提供的版本取决于您正在构建库的Spark版本因为。那个%在依赖项末尾包含的"test"告诉SBT只在测试类路径中包含这个库,而不包括在最终打包的包中JAR。是吗建议此插件可能会隐式地将ScalaTest的旧版本你可能会想到。spark testing base插件的完整文档可在以下位置找到:https://github.com/holdenk/spark-testing-base在/src/Test下创建与DateDimension类匹配的包结构和Scala测试类(源代码在此处):如果您不熟悉SBT,可以通过从项目根目录运行SBT test命令从终端执行测试。您将看到类似于以下内容的输出:2007年10月16日15:22:58警告NativeCodeLoader:无法为您的平台加载本机hadoop库。。。在适用的情况下使用内置java类16/10/07 15:22:58 WARN SparkContext:使用现有的SparkContext,某些配置可能无法生效。[信息]日期维度测试:[信息]-测试日期维度默认值不生成重复的日期值[信息]ScalaCheck[信息]通过:总计0,失败0,错误0,通过0[信息]ScalaTest[信息]运行在5秒396毫秒内完成。[信息]运行的测试总数:1[信息]套件:已完成1,已中止0[信息]测试:成功1,失败0,取消0,忽略0,挂起0[信息]所有测试通过。[信息]通过:总计1,失败0,错误0,通过1[成功]总时间:9秒,完成时间:2016年10月7日下午3:23:03发布库发布现在,我的库正在成功地编译和通过测试。将库发布为版本将使功能快照到版本。尽管您可以随意使用任何类型的版本控制标准,但最佳实践是遵循语义版本控制。我使用sbt发布插件来更好地管理库的发布过程。您可以按照以下说明进行操作:将以下行添加到项目/插件.sbt:addSbtPlugin("网址:com.github.gseitz"%"sbt版本"%""1.0.3")创建版本.sbt在项目根目录中添加以下:版本:="0.1.0-快照"从您的构建.sbt文件。在sbt发布插件生成发布之前,它首先需要一个构建.sbt文件,以便发布到工件存储库,方法是设置publishTo变量。构建工具通常在构建项目时使用工件存储库来导入依赖项。如果组织中的其他团队将依赖于您的库,您可能需要利用一个库。这允许他们指定要使用的库的哪个版本,或者只使用最新的稳定版本。这可以是网络内部的存储库,也可以是云托管的存储库,例如artifactory。SBT使用publish操作将已编译的JAR上载到工件存储库。您可以在这个链接中找到与SBT一起发布的完整文档。如果没有要发布到的工件存储库,可以通过在本地计算机上发布到Maven存储库来解决这个问题,方法是在构建.sbt文件:publishTo:=一些(Resolver.file文件("文件",新文件(路径.userHome.absolutePath+"/.m2/存储库"))sbt发布插件执行许多检查,并要求在继续之前,所有的更改都提交并推送到git中的远程跟踪分支。要剪切新版本,请从projectr运行sbt release命令