python - 这是 PySpark 的合适用例吗?空 Airflow 动? Apache 光束?

标签 python dataframe pyspark airflow apache-beam

我有一个复杂的数据处理管道,目前在单台机器上用 Python 实现。

管道是围绕处理属于一系列实现文档、页面、单词等的自定义类的对象而构建的。该管道中的大多数操作都是令人尴尬地并行的——它们处理单个文档——尽管有一些需要收集整个集合的统计。

数据集不适合内存,并且管道当前在每个阶段都依赖于磁盘上的酸洗/反酸洗对象。这可行,但速度很慢,是时候转向更具可扩展性的分布式架构了。

理想情况下我希望能够写出这样的东西:

distributed_list = read_objects()
for transform in transformations:
    distributed_list = transform(distributed_list)
custom_dataset_object = convert_to_dataset(distributed_list)
custom_dataset_object.save()

整个处理流被分解为 DAG 并在集群中并行化。

我一直在为此目的评估pyspark,但不确定它是否是完成该任务的正确工具,因为我没有处理带有大量方法的复杂自定义对象,而不是简单的数据类型.

Apache Beam 的 DoFns 看起来可能会实现我正在寻找的目标,但它似乎并没有被广泛采用,我想尽可能使用最便携的技术。

我也可以将其分解为一系列Airflow工作,但这比我想要的更加手动和脆弱。

对于更有经验的大数据工程师来说,这些评估是否准确?这些工具之一(或其他工具)最适合我的工作吗?

最佳答案

苹果和橙子

这实际上取决于您想要实现的目标。例如,PySpark 不能替代 Airflow。您可以两者都使用,也可以都不使用。您的 Airflow Operator(工作单元)可以像“调用此 PySpark 作业”一样简单。

Airflow 与处理步骤无关,而是与管道本身有关。如果您需要可追溯性、聚合日志处理、管道 SLA、条件处理步骤、回填控制、更复杂的调度等,您将需要使用它。

如果您想要动态管道,Airflow 会特别出色。编辑几个 YAML 文件,然后您的管道现在有一些额外的步骤来计算一个额外的数据片段,回填历史记录并自动每小时更新一次。当然,这不是免费的,您将实现将配置转变为运算符的逻辑。

葡萄果和葡萄柚

Airflow 可以是您选择的编排机制,但您可以决定通过一堆 cron 作业来实现相同的目的。没有汗水。

选择处理引擎是另一类问题。如今,Spark 已成为舞会女王,选择 Apache Beam 也不会逃避 Spark。它可以在 Spark 和 Flink 上运行(批处理与流式执行引擎)。但 Spark 的流处理能力也受到关注。在 PySpark 和 Beam 之间进行选择并不是可扩展性问题,而是您想要致力于哪种技术锁定。

我建议您选择经过实验确认性能优于当前引擎的处理引擎。 Sometimes running a command line utility can be faster than distributed jobs 。可扩展性是您需要随时解决的问题,因为如果不进行实验,您通常会得到过度设计的系统。

关于python - 这是 PySpark 的合适用例吗?空 Airflow 动? Apache 光束?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49682576/

相关文章:

python - 奇怪的 PIL.Image.fromarray 行为,numpy 零和模式为 ='1'

apache-spark - GraphFrames:合并具有相似列值的边缘节点

python - 我遇到了来自 Django 的 404 错误消息。它说 "No location found matching the query"

python - 从一个可迭代对象中一次产生多个对象?

python - 如何处理Python错误:tornado.application:Uncaught exception

python - 使用条件 groupby 创建 python 数据框

python - 如何在DataFrame中分离和添加值?

python - 查找具有不同标题的行

python - 如何从 Azure 数据工厂管道将参数传递给 python 脚本

apache-spark - SparkContext对象没有属性esRDD(elasticsearch-spark连接器)