当前位置: 首页 > 科技观察

作为初创公司的第一位数据工程师,我从没有数据工程经验的人那里学到了

时间:2023-03-21 13:01:05 科技观察

作为初创公司的第一位数据工程师,这是一项艰巨的挑战,但收获颇丰。公司在招聘时,不仅要找到合适的人,还要让他们相信加入公司是正确的选择。当我得到EmCasa的面试机会时,我是另一家公司的数据科学家。他们想要可以帮助他们组织数据的人。我问他们现在有什么数据,他们很老实的回答我:“我们PostgreSQL数据库只有几张表,尝试用了一些BI工具,就这样”。听了他们之后,我也老老实实地告诉他们:我没有什么牛逼的学位,之前没有做过数据工程师,不知道Spark,不知道Airflow,我不是一个ETL专家,我不知道测试和Git。东西,我也不是开发人员。但是我已经看到了很多东西,有些不错,有些不错但仍有改进的余地,有些则完全没有。我的想法是尽量避免尝试已知行不通的事情。我不知道他们怎么想的,但我最终成为了他们公司的第一位数据工程师。加入这家公司后,一切都如他们所说。我有足够的回旋余地,可以按照我认为最好的方式去做每件事。第一周,我们设定了一些季度OKR:从FacebookAds、GoogleAds、SalesForce和其他第三方服务获取数据;实施BI平台;将财产估值算法的准确性提高20%;将估值模型设计为独立的API;网络爬虫的更新和改进。为了从第三方服务中提取数据,我们开始研究StitchData、Fivetran、Segment、Alooma、Rivery等ETL解决方案。为每个第三方服务API构建自定义集成将花费大量时间,但我们速度很快,并且使用ETL服务解决方案为我们节省了数月的开发和维护时间。我们决定使用Rivery,并在两周内设置了一个Redshift集群,每天从第三方服务更新数据。这时,Luca作为我们的BI分析师加入了我们。他现在有很多数据可以使用。我们还使用元数据库作为仪表板。到目前为止,一切都很好。我们终于有了真正的数据,而不仅仅是PostgreSQL中的几张表!下一步是改进财产估值模型并使其成为一个独立的API(以前该模型与后端绑定)。但是我们没有足够的数据来创建新模型(我们确实有一些数据,但还不够)。所以,我把目光投向了我们的网络爬虫工具。它是用Elixir开发的(我们的后端是用Elixir开发的),但我不了解Elixir,所以我决定用Python从头开发另一个爬虫。我创建了一个名为Spatula的Python包,它从其他网站抓取列表并将它们保存到S3。这时候我们的数据科学家Priscila也加入进来了,她负责处理旧数据。我在本地运行Spatula,她可以使用Athena查询数据并开始建模。接下来,我开始研究Airflow,但遇到了一些麻烦。一个是学习如何编写DAG,另一个是学习如何可靠地将Airflow部署到AWS。我花了很多时间学习Airflow、Terraform、Docker和AWSECS,然后才在AWS上成功部署了我的第一个部署(https://github.com/nicor88/aws-ecs-airflow),然后花了更多的时间很多时间是根据我们的需要定制的。我担心这项任务会占用太多时间,所以我问经理我是否可以将时间推迟一点,并以不同的方式安排任务(我知道从长远来看这是行不通的)。经理的回答是:“我们在面试你的时候就知道你的情况,有些事情你不明白,但你可以花时间去学习,找到正确的方法来完成这些任务。”这种“做正确的事”的管理姿态和承诺,是我在其他公司从未见过的。然后,我们投入更多精力部署Airflow,让Spatula爬虫每周抓取一次数据。收集用户信息以预测房地产销售价格。我们询问房产的详细信息,例如有多少房间、套房、浴室和车库。此时,Priscila的新估值模型也已准备就绪,但尚未准备好用于生产。我开始与她结对编程并告诉她我改变了什么,为什么以及如何改变。然后我们一起部署了我们的第一个机器学习模型Priceteller。它是一个运行在AWSLambda上的FlaskAPI和APIGateway。在部署之前,我们还与开发团队讨论了很多与代码质量、测试和文档相关的问题。他们不想在生产中向不可靠的API发送请求——他们绝对有理由拥有如此高的标准。当我们达到他们的标准时,我们的第一个机器学习模型就可以上线了。我们最近还部署了第二个实时模型Selekta,它根据用户偏好推荐列表。我们的第一个机器学习模型,从数据抓取到部署Priscila告诉我她以前的公司如何使用Airflow。由于我以前从未使用过Airflow,所以我尝试通过反复试验来学习。她提出了一份改进清单,我全部接受了。从那时起,我们开始在AWSGlue上运行Spark作业并使用Airflow任务来触发和监控它们。我们的工作每小时从后端获取数据。我们还有一些其他任务负责保存用户日志事件。我们还创建了一个每天批量运行的推荐模型。在不知不觉中,我们现在在S3上拥有超过2TB的数据湖。我们当前的数据基础架构那么,我们从中学到了什么?如果目标明确,学习不是问题。对于具有数据科学背景的人来说,数据工程并不复杂。作为数据科学家,我们感到没有可用的数据或工具来完成工作的痛苦。但是我们可以学习,Airflow、AWS、Spark、Git、Python,应有尽有。只要知道目标是什么,就能在短时间内学会。漫无目的的学习很难有效果。知道一家公司知道做什么和去做是两件不同的事情。这与公司的文化有关。我在面试中知道我加入了一家公司,这家公司给了我以我认为正确的方式解决问题的自主权。你可以在面试的时候问他们数据对公司有多重要。只是为了支持?或者是公司发展战略的一部分?他们对你真诚吗?如果数据不是贵公司发展战略的一部分,那么您可能无法花费大量时间来规划和做正确的事情。数据即产品将API、模型和仪表板作为独立产品为数据团队提供了极大的灵活性。但他们必须满足某些标准才能通过。将数据视为一种产品并形成一种文化,使团队免受日常业务问题的影响——分析师可以回答的问题。我们的经理保护我们不受外界干扰,这样我们就可以专注于学习和完成工作。寻求帮助有时您需要独自完成一些工作,但有时向有经验的人寻求帮助可以节省您很多时间。如果您的团队中有经验丰富的人,请询问他们在其他公司是如何做到的。即使他们不知道该做什么,至少他们知道什么有效,什么无效。寻求帮助肯定会引导您朝着正确的方向前进。善用时间有些事情可以使用第三方工具轻松完成,比如我在本文开头提到的ETL解决方案。如果您的数据仓库中没有来自Facebook的数据,那么没有必要浪费时间学习如何连接到FacebookInsightsAPI;如果您没有在EMR上运行的作业,则无需学习如何在EC2上构建Spark集群;如果您没有GlueJob,则无需使用EMR;如果您没有Athena查询,则不需要GlueJob。首先尝试使用最简单的解决方案(维护时间不长的解决方案)。当简单的解决方案不够用时,开始学习其他工具。从一开始就使用复杂的解决方案可能会浪费您的时间。专注于使用最简单的解决方案尽快交付业务价值。没有什么比构建不需要花费大量时间来维护和花半天时间修复错误的东西更糟糕的了。如果事情经常出错,那么要么你做事的方式错误,要么你没有使用正确的工具,要么两者兼而有之。从一开始就把事情做好可能会花费你更多的时间,但会在未来为你节省时间。诚实如果有什么你不明白的,尽管说出来,但也要证明你可以并且愿意学习。这样您就可以利用工作时间学习新事物。分享您的知识分享其他团队成员不知道的事情。这将有助于你专注于学习,也有助于减少不同工种之间的工作摩擦。如果数据工程师、数据科学家和机器学习工程师之间有默契,工作会更顺利。结对编程是分享知识和获得实时反馈的好方法。花点时间分享您的知识,看看您能为他人提供什么。花点时间休息一下在完成一个大项目(例如部署新的ETL管道)后,花点时间做一些小任务,例如编写文档或修复遗留错误。欲速则不达,马不停蹄地开始另一个大项目可能会让你走得更慢。