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

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

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

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

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 с правильным типом перед созданием dataframe.

2 ответа

Решение

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

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

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

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

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

def withColumn(colName: String, col: Column): DataFrame
Другие вопросы по тегам