Для своего Azure DataBricks я создал две записные книжки, ExtractorPython и ExtractorScala, которые написаны на Python и Scala соответственно.Каждый из них вызывает блокнот, DocumentationPython и DocumentationScala, соответственно.
В обеих записных книжках Allergies пример кода проверяет, существует ли таблица ProblemData.Если это так, он объединит 4 другие таблицы вместе, чтобы вставить в основную таблицу Документация.Размер таблицы варьируется от 6 МБ до 2800 МБ.Вот пример кода документации в 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"
)
Запрос более сложный, чем запрос с 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.Некоторые статьи говорят, что это в 10 раз быстрее.Мой тест показывает, что различий нет и Python немного быстрее.Почему это так?
Кроме того, почему вызов записной книжки из другой записной книжки добавляет в среднем 20 секунд, например, вызов DocumentationPython from ExtractorPython?