繁体   English   中英

在 Azure 数据块中使用 Pyspark 代码比使用 SQL 有什么好处?

[英]Any benefits of using Pyspark code over SQL in Azure databricks?

我正在做一些已经有 SQL 代码的事情。 现在我们正在迁移到 Azure。所以我为转换创建了一个 Azure 数据块,并使用相同的 SQL 代码进行了一些小改动。

我想知道 - 是否有任何推荐的方法或最佳实践来使用 Azure 数据块? 我们是否应该重写 PySpark 中的代码以获得更好的性能?

注意:之前 SQL 代码的最终结果没有错误。 只是我们要迁移到 Azure。我没有花时间重写代码,而是使用了相同的 SQL 代码。 现在我正在寻找建议,以了解最佳实践以及它将如何产生影响。

寻求您的帮助。 谢谢 !

期待 - 随着从本地迁移到 Azure。我正在寻找一些最佳实践以获得更好的性能。

在幕后,所有代码(SQL/Python/Scala,如果编写正确)都由同一个执行引擎执行。 您始终可以比较 SQL 和 Python 的执行计划(对于 SQL 为EXPLAIN <query ,对于 Python 为dataframe.explain() )并查看它们对于相同的操作是相同的。

因此,如果您的 SQL 代码已经可以使用,您可以继续使用它:

但通常使用 Python 可以获得更多的灵活性或功能。例如(这不是完整列表):

  • 您可以以编程方式生成执行相同转换但在不同表上的 DLT 表
  • 您可以使用流媒体源(SQL 对流媒体的支持还不是很广泛)
  • 您需要将您的代码与一些 3rd 方库集成

但实际上,在 Databricks 上,您通常可以将 SQL 和 Python 代码混合并匹配在一起,例如,您可以将 Python 代码公开为用户定义的 function 并从 SQL 调用它( 正在执行此操作的 DLT 管道的小示例)等。

您在那里问了很多问题,但我会解决您在标题中提出的问题:

使用 Pyspark 代码比使用 SQL 有什么好处?

是的。

  • PySpark 更容易测试。 例如,在 PySpark 中编写的转换可以抽象为 python function 然后可以在测试中单独执行,因此您可以使用无数的 python 测试框架之一(我个人是测试)。 这对于 SQL 来说并不容易,其中转换存在于整个 SQL 语句的范围内,并且在不使用视图或用户定义函数的情况下无法抽象化,这些视图或用户定义函数是需要创建的物理数据库对象。
  • PySpark 更具可组合性。 可以将来自不同地方(可能由不同人编写的)的自定义逻辑放在一起来定义端到端的 ETL 过程。
  • PySpark 的惰性评估是一件很美好的事情。 它允许您以探索的方式组成 ETL 过程,像 go 一样进行更改。这确实使 PySpark(以及一般的 Spark)成为一件好事,而惰性评估的好处无法真正解释,它必须有经验。

不要误会我的意思,我喜欢 SQL,对于临时探索来说,它是无与伦比的。 在 PySpark 上使用 SQL 有充分合理的理由,但这不是你的问题。

这些只是我的意见,其他人可能会有所不同。

在获得有关已发布问题的帮助并进行一些研究后,我得出了以下回应 -

  • 选择哪种语言(SQL 或 Python)并不重要。 由于它使用 Spark 集群,因此 Sparks 将其分布在集群中。 这取决于特定的用例在哪里使用什么。
  • SQL 和 PySpark dataframe 中间结果都存储在 memory 中。
  • 在同一个笔记本中,我们可以根据情况使用两种语言。

使用 Python - 用于大量转换(更复杂的数据处理)或用于分析/机器学习目的使用 SQL - 当我们处理关系数据源时(专注于查询和操作存储在关系数据库中的结构化数据)

注意:我们可以使用两种语言的一些优化技术来提高性能。

摘要:根据用例选择语言。 两者都具有分布式处理,因为它运行在 Spark 集群上。

谢谢 !

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM