Почему Spark от DataBricks работает немного быстрее в Python, чем в Scala - PullRequest
0 голосов
/ 22 мая 2019

Для своего 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 из двух узлов:

cluster

Здесьскорость теста для 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?

...