У меня есть требование преобразовать таблицу данных огурца во фрейм данных для целей тестирования. Я имею в виду проект 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 =>))
Может кто-нибудь помочь мне понять, чего не хватает?
Заранее спасибо