У меня есть файл CSV, где последний столбец находится внутри скобок, а значения разделены запятыми.Количество значений является переменной в последнем столбце.Когда я читаю их как Dataframe с некоторыми именами столбцов, как показано ниже, я получаю Exception in thread "main" java.lang.IllegalArgumentException: requirement failed: The number of columns doesn't match
.Мой CSV-файл выглядит следующим образом:
a1,b1,true,2017-05-16T07:00:41.0000000,2.5,(c1,d1,e1)
a2,b2,true,2017-05-26T07:00:42.0000000,0.5,(c2,d2,e2,f2,g2)
a2,b2,true,2017-05-26T07:00:42.0000000,0.5,(c2)
a2,b2,true,2017-05-26T07:00:42.0000000,0.5,(c2,d2)
a2,b2,true,2017-05-26T07:00:42.0000000,0.5,(c2,d2,e2)
a2,b2,true,2017-05-26T07:00:42.0000000,0.5,(c2,d2,e2,k2,f2)
. Что я, наконец, хочу, это примерно так:
root
|-- MId: string (nullable = true)
|-- PId: string (nullable = true)
|-- IsTeacher: boolean(nullable = true)
|-- STime: datetype(nullable = true)
|-- TotalMinutes: double(nullable = true)
|-- SomeArrayHeader: array<string>(nullable = true)
. До сих пор я написал следующий код:
val infoDF =
sqlContext.read.format("csv")
.option("header", "false")
.load(inputPath)
.toDF(
"MId",
"PId",
"IsTeacher",
"STime",
"TotalMinutes",
"SomeArrayHeader")
Я подумал о том, чтобы прочитать их без указания имен столбцов, а затем привести столбцы, расположенные после 5-го столбца, к типу массива.Но тогда у меня проблемы с круглыми скобками.Есть ли способ, которым я могу сделать это, читая и сообщая, что поля внутри скобок на самом деле являются одним полем типа массив.