Spark Unit Test: объект не сериализуем (класс: org.scalatest.Assertions $ AssertionsHelper) - PullRequest
0 голосов
/ 14 января 2019

Я написал общий метод Scala, который после прочтения определения столбца улья создает таблицу улья. Подпись метода, для этого же:

def createHiveTable(tableName: String, metaDataList: List[SchemaColumnDefinition]) = { ....}

case class SchemaColumnDefinition(name: String,
                                  dataType: String,
                                  precision: Option[Integer],
                                  scale: Option[Integer]) {

Я написал один тестовый блок для того же

  "createHiveTable" should " create hive table with provided column definition" in {
    // GIVEN
    val columns = SchemaColumnDefinition("testIntColumn", "INT", None, None) ::
      SchemaColumnDefinition("testStringColumn", "STRING", None, None) ::
      SchemaColumnDefinition("testDecimalColumn", "DECIMAL", None, None) ::
      Nil
    val testTableName = "testTable"
    // WHEN
    HiveTableManager.createHiveTable(testTableName, columns)
    // THEN
    sparkSession.catalog.listColumns(testTableName).foreach { columnDefinition =>
      columnDefinition.name match {
        case "testIntColumn" => assert(columnDefinition.dataType.toLowerCase == "int")
        case "testStringColumn" => assert(columnDefinition.dataType.toLowerCase == "string")
        case "testDecimalColumn" => assert(columnDefinition.dataType.toLowerCase == "decimal(10,0)")
      }
    }
  }

Но при запуске того же, я получаю следующее исключение:

[scalatest]   Cause: java.io.NotSerializableException: org.scalatest.Assertions$AssertionsHelper
[scalatest] Serialization stack:
[scalatest]         - object not serializable (class: org.scalatest.Assertions$AssertionsHelper, value: org.scalatest.Assertions$AssertionsHelper@420068a)
[scalatest]         - field (class: org.scalatest.FlatSpec, name: assertionsHelper, type: class org.scalatest.Assertions$AssertionsHelper)
[scalatest]         - object (class com.demo.spark.executor.hive.HiveTableManagerTest, HiveTableManagerTest)

полный журнал

Если я заменю «assert» на оператор «println», тестовый сценарий будет пройден.

Я попытался расширить тестовый класс с помощью «Serializable», но то же исключение сохраняется.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...