sql - BigQuery 取代了我的大部分 Spark 工作,我错过了什么吗?
问题描述
多年来,我一直在使用本地集群开发 Spark 作业,我们的团队最近迁移到了 Google Cloud Platform,这使我们能够利用 BigQuery 等的强大功能。
问题是,我现在经常发现自己在 SQL 中编写处理步骤比在 PySpark 中更多,因为它是:
- 更容易推理(不那么冗长)
- 更易于维护(SQL vs scala/python 代码)
- 如果需要,您可以在 GUI 上轻松运行它
- 快速而无需真正考虑分区,缓存等......
最后,我只在有无法使用 SQL 表达的事情时才使用 Spark。
需要明确的是,我的工作流程通常是这样的:
- 预处理(以前在 Spark 中,现在在 SQL 中)
- 特征工程(以前在 Spark 中,现在主要在 SQL 中)
- 机器学习模型和预测 (Spark ML)
我错过了什么吗?以这种方式使用 BigQuery 而不是 Spark 有什么缺点吗?
谢谢
解决方案
我可以看到的一个缺点是 Hadoop 集群创建和完成作业所需的额外时间。通过向 BigQuery 发出直接请求,可以减少额外的时间。
如果您的任务需要并行处理,我建议使用 Spark,但如果您的应用程序主要用于访问 BQ,您可能需要使用 BQ 客户端库并分离当前任务:
BigQuery 客户端库。它们经过优化以连接到 BQ。这是一个快速入门,您可以使用不同的编程语言,如 python 或 java 等。
火花作业。如果您仍需要在 Spark 中执行转换并需要从 BQ 读取数据,您可以使用Dataproc-BQ 连接器。虽然此连接器默认安装在 Dataproc 中,但您可以将其安装在本地,以便继续使用 BQ 数据运行 SparkML 作业。以防万一,您可能需要考虑使用一些 GCP 服务,例如 AutoML、BQ ML、AI Platform Notebooks 等,它们是机器学习和 AI 的专门服务。
推荐阅读
- reactjs - 使用 React 测试库设置 React 上下文值
- word2vec - 为什么 Google word2vec 不包含“the”、“a”等常用词
- azure - 我可以在 Azure 集成运行时警报中设置时间范围吗?
- r - R 上的 GVIZ 未从 UCSC 加载 mm10
- traefik - ingressroute 如何连接到 traefik 的入口控制器
- python - overlay how='difference' 应该与 geopandas 0.9 和 0.10 不同吗?
- go - Gomock 未公开的接口作为参数
- javascript - 如何使用 reactjs 前端修复 multer 代码未添加到我在 nodejs 中的服务器内创建的文件夹中
- ios - Swift - 为什么 CFString 和 NSString 是可分配的?
- javascript - 查找没有 id 的 div 并更改它的文本