Преобразование типа данных столбца с использованием фрейма данных 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