У меня есть файл 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-го столбца, в тип массива. Но тогда у меня проблемы со скобками. Есть ли способ сделать это, читая и сообщая, что поля внутри скобок на самом деле являются одним полем массива типов.