对于我的Azure DataBrick,我创建了两个笔记本ExtractorPython和ExtractorScala,分别用Python和Scala编写。它们分别将笔记本称为DocumentationPython和DocumentationScala。
在两个Allergies笔记本中,示例代码将检查是否存在表ProblemData。如果是这样,它将把其他4个表连接在一起以插入到主表文档中。该表的大小从6 MB到2800 MB不等。这是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集群配置:
这是在几分钟内针对Python与Scala进行多次运行的速度测试:
ExtractorPython :3.22分钟
DocumentationPython :2.78分钟
ExtractorScala :3.24分钟
DocumentationScala :2.88分钟
这是我将群集扩展到6个节点时的速度测试:
ExtractorPython :2.22分钟
DocumentationPython :1.95分钟
ExtractorScala :分钟
DocumentationScala :1.98分钟
我已经读过Scala应该比Python快。某些articles表示速度要快10倍。我的测试表明没有差异,Python的速度稍快。为什么会这样?
此外,为什么从另一个笔记本中调用一个笔记本平均要花20秒的时间,例如从ExtractorPython中调用DocumentationPython?
答案 0 :(得分:0)
Scala代码比Python快的原因之一是因为Scala代码已预编译为Bytecode。在数据块中,每个代码时钟都是在运行时编译的,并且没有预定义的JAR。
出于这个原因,我认为,在笔记本环境中,Scala / Java的任何编译语言都比Python等解释型语言失去任何优势。