Преобразование типа данных столбца с помощью фрейма данных Spark.

У меня есть rdd, тип которого — строка, потому что он был прочитан из текстового файла и содержит около 20 полей. Например,

val rdd = sc.parallelize(Seq( ("1", "2.0", "three"), ("1", "2.0", "three")))

Я хочу использовать динамически сгенерированный тип структуры, например, для создания фрейма данных -

val aStruct = new StructType(Array(StructField("id",LongType,nullable = true),StructField("id2",StringType,nullable = true), StructField("role",StringType,nullable = true)))

val df =  sqlContext.createDataFrame(rdd, aStruct)

Есть ли способ автоматически обработать это, или мне нужно обновить каждое поле на rdd с правильным типом перед созданием фрейма данных.


person user447359    schedule 12.03.2016    source источник
comment
Всегда ли они будут строками?   -  person Alberto Bonsanto    schedule 13.03.2016


Ответы (2)


Если вы создали StructType самостоятельно и использовали его для фрейма данных, невозможно обрабатывать его автоматически. Я думаю, вы хотите использовать одну и ту же логику кода для нескольких источников данных.

1) Если ваши данные взяты из файла и имеют тип csv или любые данные с разделителями, я предлагаю попробовать spark-csv Существует опция InferSchema, которая автоматически идентифицирует данные и не требует создания схемы вручную.

Но если вам нужно работать с RDD, есть два способа: 1) создать класс case 2) создать StuckTypes, как вы это делали, динамически на основе данных. Для обоих из них, я не думаю, что вы получите то, что вы ожидали.

пожалуйста, дайте более подробную информацию о проблеме, если вы не можете работать с spark-csv, и я могу попробовать и предоставить решение.

person Srini    schedule 13.03.2016

Я использовал следующий API для dataFrame в цикле для обновления столбца.

def withColumn(colName: String, col: Column): DataFrame
person user447359    schedule 13.03.2016