Spark 2.1: Отсутствует ошибка типа параметра при преобразовании таблиц данных огурца в кадры данных - PullRequest
0 голосов
/ 06 апреля 2020

У меня есть требование преобразовать таблицу данных огурца во фрейм данных для целей тестирования. Я имею в виду проект github, который имеет пример преобразования: https://github.com/mdcurran/simple-spark-testing

Мой скрипт gherkin:

Учитывая, что я преобразовываю следующие данные во фрейм данных:

| STUDENT_ID: Int | NAME: String | ЗАМЕЧАНИЯ: String |

| 1 | Sam | Pass |

| 2 | Nick | Pass |

Мое определение шага, которое вызывает вспомогательный метод, который выполняет преобразование:

Given("""^I convert the following data to data frame$"""){ (data: DataTable) =>

    TestUtils.test(data)

}

Вспомогательные методы:

object TestUtils extends SparkSessionTestWrapper {

def test(data: DataTable): Unit = {
   val header = extractColumns(data)
   val schema = generateSchema(header)
   val rows = extractRows(data, schema)
   val baseTableDF = spark.sqlContext.createDataFrame(spark.sparkContext.parallelize(rows), schema)
}

//  Function1: This method works fine and splits the header into column names and data types:

  def extractColumns(data: DataTable): List[(String, DataType)] = {
    val header: util.List[String] = data.row(0)
    header.map(_.split(":"))
      .map(splits => (splits(0), splits(1).trim.toLowerCase))
      .map {
        case (name, "string") => (name, DataTypes.StringType)
        case (name, "int") => (name, DataTypes.IntegerType)
        case (name, _) => throw new IllegalArgumentException(s"$name invalid - " + s"provide a valid data type: String | Int")
      }.toList
  }

//  Function2: This second function creates a structType successfully, with the list of columns from extractColumns function
  def generateSchema(columns: List[(String, DataType)]): StructType = {
    StructType(columns.map {
      case (name, dataType) => StructField(name, dataType)
    })
  }

//  Function3: This function uses the schema from the above function and the cucumber data table to generate a List. The error occurs in this function "missing parameter type"

  def extractRows(data: DataTable, schema: StructType): List[Row] = {
    data.asMaps(classOf[String], classOf[String])
      .map { row =>
        val values = row
          .values()
          .zip(extractColumns(data))
          .map { case (v, (_, dt)) => (v, dt) }
          .map {
            case (v, DataTypes.StringType) => v
            case (v, DataTypes.IntegerType) => v.toInt
          }.toSeq
        Row.fromSeq(values)
      }.toList
  }

}

Проблема в 3-й функции extractRows (Ошибка: (63, 14) отсутствует тип параметра .map {row =>))

Может кто-нибудь помочь мне понять, чего не хватает?

Заранее спасибо

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