为什么DataBricks的Python Spark在运行时比其他的稍快一点

2024-04-26 11:34:15 发布

您现在位置:Python中文网/ 问答频道 /正文

对于我的azuredatabricks,我创建了两个笔记本,ExtractorPython和ExtractorScala,它们分别用Python和Scala编写。他们分别称笔记本为DocumentationPython和DocumentationScala。你知道吗

在这两个过敏笔记本中,一个示例代码将检查是否存在ProblemData表。如果是这样,它将把其他4个表连接在一起,以插入到主表文档中。表的大小从6MB到2800MB不等。下面是Python中的示例文档代码:

IfExtsDf = sqlContext.sql("SHOW TABLES LIKE 'ProblemData '")

#If ProblemData exists then insert data from query into Documentation
if IfExtsDf.head(1):
  spark.sql(
  "INSERT INTO Documentation "+
  "SELECT " +
  "EPA.Field1, " +
  "msa.Field2, " +
  "RAM.Field3 " +
  "FROM ProblemData AS EPA " + 
  "INNER JOIN MedicalRecordNumbers AS msa ON " + 
  "  msa.MisAllrgID = EPA.AllergenID AND " + 
  "  msa.SourceID   = EPA.SourceID AND " + 
  "  msa.EhrId      = EPA.EhrId " + 
  "LEFT JOIN  Staging_Main AS RAM ON " + 
  "  RAM.PatientID = EPA.PatientID AND " + 
  "  RAM.SourceID  = EPA.SourceID AND " + 
  "  RAM.EhrId     = EPA.EhrId" 
  )

这个查询比在Documentation表中有8个常规插入和3个条件插入的查询更复杂,但我不能显示更多。 下面是Python中的基本提取器代码:

#Run DocumentationPython
dbutils.notebook.run("DocumentationPython",0)

以下是我的两个节点的Spark群集配置:

cluster

以下是Python与Scala在几分钟内多次运行的速度测试:

提取器主题:3.22分钟

文档Python:2.78分钟

提取器Scala:3.24分钟

文档Scala:2.88分钟

下面是我将集群升级到6个节点时的速度测试:

提取器主题:2.22分钟

文档Python:1.95分钟

提取器Scala:分钟

文档Scala:1.98分钟

我读到Scala应该比Python快。一些articles说它的速度快了10倍。我的测试显示没有任何区别,Python稍微快一点。为什么?你知道吗

另外,为什么从另一个笔记本调用一个笔记本会平均增加20秒,例如,从ExtractorPython调用DocumentationPython?你知道吗


Tags: and代码文档documentationas笔记本速度msa