unittest: NameError: имя 'dbutils' не определено - PullRequest
0 голосов
/ 15 апреля 2020

Как выполнить юнит-тестирование python файлов из .ipynb Databricks без импорта всего из файла .ipynb?

Например, я пытаюсь использовать unittest из VS Код на моем рабочем столе, где я клонировал файл .ipynb из моего Azure экземпляра Databricks.

Как только я запустил его локально, у меня есть простой модульный тест для чтения CSV.

Проблема в том, что когда я пытаюсь загрузить --single функцию-- из файла, который я тестирую (csv_to_parquet), тест пытается загрузить весь файл, который содержит элементы, недоступные локально. В частности, NameError: name 'dbutils' is not defined.

Я не использую dbutils в этом модульном тесте. Он просто читает это, когда пытается загрузить файл csv_to_parquet.py . Как сказать модульному тесту полностью игнорировать это?

Единственная функция, импортируемая из файла, который я хочу протестировать:

def readAndShowCSV(sFilePath = 'users.csv/users' ):
  csvFile = spark.read.csv(mountPoint+loadPath+'/' + sFilePath, header=True, inferSchema=True)
  csvFile.show(5)

  return csvFile

Так почему же Dbutils Вам вообще звонят?

import unittest
import pandas as pd
from csv_to_parquet import readAndShowCSV

# Inherits from unittest.TestCase
# Gives us access to testing capibilities 
class TestParquet(unittest.TestCase):

    def test_readAndShowCSV(self): 

        # Function lives in csv_to_parquet.py
        csvFile = readAndShowCSV() 


# Will run all of our tests
if __name__ == '__main__':
    unittest.main()

Ответы [ 2 ]

1 голос
/ 15 апреля 2020

Dbutils - это пакет от Databricks, который обозначает утилиту Databricks. У вас есть 2 варианта: 1. Либо удалите его из исходного файла. 2. Установите pypy форму Dbutils по этой ссылке: https://pypi.org/project/DBUtils/

0 голосов
/ 16 апреля 2020

Я полагал, что "from [class] import [function]" ТОЛЬКО импортирует функцию, но это не так. Импортирует весь класс.

Одна из функций в классе использовала dbutils.

Пользователь simon_dmorais рекомендуется:

Я бы подумал об использовании databricks-connect для этого (это будет медленно для модульных тестов). Или удалите все ссылки на dbutils из этого модуля (или субмодулей, которые он импортирует).

...