У меня есть входной файл, который очень похож на CSV, но с пользовательским заголовком:
FIELDS-START
field1
field2
field3
FIELDS-END-DATA-START
val1,2,3
val2,4,5
DATA-END
Задача:
Для считывания данных в типизированный фрейм данных схема получается динамически, пример для этого конкретного файла:
val schema = StructType(
StructField("field1", StringType, true) ::
StructField("field2", IntegerType, true) ::
StructField("field3", IntegerType, true) :: Nil
)
Так что из-за пользовательского заголовка я не могу использовать spark csv reader. Другая вещь, которую я пробовал:
val file = spark.sparkContext.textFile(...)
val data: RDD[List[String]] = file.filter(_.contains(",")).map(_.split(',').toList)
val df: DataFrame = spark.sqlContext.createDataFrame(data.map(Row.fromSeq(_)), schema)
Сбой с исключением времени выполнения
java.lang.String не является допустимым внешним типом для схемы типа int , поскольку createDataFrame не выполняет приведение типов.
ПРИМЕЧАНИЕ. Схема получается во время выполнения
Заранее спасибо!