教程:运行PySpark码头工人的容器内

在本文中,我们将向您展示如何开始运行PySpark码头工人容器内部应用程序,通过一步一步的教程和示例代码(看到github)。

有多种动机运行码头工人的内心激发的应用程序容器,我们在文章“覆盖它们火花和码头工人- Dev工作流刚快10倍”:

  • 码头工人简化包装和容器管理依赖的外部java库(jar)或python库与数据处理,可以帮助或帮助连接到外部数据存储。添加或升级一个图书馆可以打破你的管道(如因为冲突)。使用码头工人意味着您可以捕获这个失败在本地开发时间,修复它,然后发布您的形象与信心,罐子和环境问题将是相同的,无论你的代码运行。
  • 码头工人容器也是一个伟大的方式来开发和测试引发本地代码,在运行前在生产规模集群(例如Kubernetes集群)。

在力学数据,我们维持一个舰队的码头工人与一系列有用的库图片哪来的内置数据连接器数据湖泊、数据仓库、流数据来源,以及更多。你可以阅读更多关于这些图片在这里,免费下载Dockerhub

在本教程中,我们将带您亲历的过程建立一个新的码头工人的形象从一个基地的图片,添加新的依赖关系和测试安装的功能通过使用考拉库postgres数据库和写一些数据。

需求

这个演示的目的,我们将创建一个简单的PySpark应用程序读取人口密度数据从公共数据集——每个国家https://registry.opendata.aws/dataforgood-fb-hrsl,转换适用于发现人口中值,并将结果写入一个postgres实例。寻找中值,我们将利用考拉熊猫的火花实现API。

从引发3.2 +,大熊猫与开源库将自动绑定火花。在本教程中,我们使用3.1火花,但是将来你不需要安装考拉,它会工作的。

寻找中值值使用火花很麻烦,所以我们将利用简洁的考拉功能解决方案(注:从公共数据源读取,您将需要访问一个AWS_ACCESS_KEY_ID AWS_SECRET_ACCESS_KEY。桶是公共的,但AWS需要用户创建读取公共桶)。

如果你没有一个postgres数据库方便,您可以创建一个本地使用以下步骤:

码头工人拉postgres
码头工人运行- e POSTGRES_PASSWORD = postgres - e POSTGRES_USER = postgres - d - p 5432:5432 postgres

建设码头工人形象

Dockerfile

开始,我们将使用最新的数据构建我们的码头工人形象力学基地的形象gcr.io / datamechanics /火花:- 3.1最新的平台。有一些方法来在火花中包含外部库的应用程序。对于特定于语言的库,您可以使用包管理器皮普python或sbtscala直接安装库。或者,您可以下载该库jar到码头工人形象和jar移动到/ opt /火花/ jar。这两种方法都实现相同的结果,但某些库或包只能安装一个方法。

安装考拉,我们将使用python pip包直接添加到我们的环境。标准的惯例是创建一个需求文件列出你所有的python依赖和使用pip每个库安装到您的环境。回购,在应用程序中创建一个文件,并添加以下行-考拉= = 1.8.1。将该文件复制到你的码头工人形象并添加以下命令pip3 - r让安装运行。现在你应该能够考拉直接导入到您的python代码。

接下来,我们将使用jar方法安装必要的sql司机这火花可能直接写postgres。首先,让我们把postgres驱动程序jar到你的形象。添加以下行Dockerfile -wget运行https://jdbc.postgresql.org/download/postgresql-42.2.5.jar和返回jar移动到/ opt /火花/ jar。当你开始你的火花应用,postgres司机将在类路径中,你将能够成功地写入数据库。

开发您的应用程序代码

例子PySpark工作流

最后,我们将增加我们的应用程序代码。在上面的代码片段中,我们有一个简单的火花应用程序,它读取DataFrame从公众斗源。接下来,我们将火花DataFrame通过分组列,铸造人口列一个字符串,和聚合。然后我们将火花DataFrame转换成考拉DataFrame和应用中值函数(一个操作在火花)。最后,我们把考拉DataFrame回到火花DataFrame和添加日期列,这样我们可以利用write.jdbc和我们的数据输出到一个SQL表函数。

监控和调试

脚本构建和运行在本地图像(注意:这是一个justfile)
帮助本地运行应用程序,我们包括justfile一些有用的命令开始。
  • 在本地构建你的码头工人形象,运行刚刚建立
  • PySpark应用程序运行,运行你就跑
  • 访问PySpark壳的码头工人形象,运行只是外壳

你也可以直接通过运行执行到码头工人容器码头工人——<图像名称> /bin/bash运行。这将创建一个交互式shell,可以用来探索码头工人/火花环境,以及监控性能和资源利用率。

结论

我们希望您发现本教程有用!如果你想进一步深入这个代码,或探索其他应用程序演示,我们Github的例子回购。