Краткий ответ: Строка / Текст не может быть указан с пользовательскими типами / форматами.
То, что вы пытаетесь сделать, - это проанализировать строку как sql столбцы. Отличие от другого примера в том, что загрузку из csv вы пытаетесь просто. Рабочая версия может быть достигнута следующим образом:
// skipped other details such as schematype, spark session...
val header = "c1:String|c2:String|c3:Double|c4:Integer"
// Create `Row` from `Seq`
val row = Row.fromSeq(Seq("a|b|44.44|12|"))
// Create `RDD` from `Row`
val rdd: RDD[Row] = spark.sparkContext
.makeRDD(List(row))
.map { row =>
row.getString(0).split("\\|") match {
case Array(col1, col2, col3, col4) =>
Row.fromTuple(col1, col2, col3.toDouble, col4.toInt)
}
}
val stt: StructType = StructType(
header
.split("\\|")
.map(column => StructField(column, inferType(column), true))
)
val dataFrame = spark.createDataFrame(rdd, stt)
dataFrame.show()
Причина создания строки из типов Scala заключается в том, что здесь вводятся совместимые типы или Row
уважаемые типы.
Примечание. Я пропустил дату и время связанные поля, преобразования даты сложны. Вы можете проверить мой другой ответ, как использовать отформатированные дату и время здесь