使用 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上的每个字段。

如果您自己创建了 StructType 并将其用于数据帧,则无法自动处理它。我猜您想对多个数据源使用相同的代码逻辑。

1)如果您的数据来自文件并且是csv类型或任何分隔数据,我建议您尝试spark-csv有一个名为InferSchema的选项,它会自动识别数据,无需手动创建架构。

但是,如果您需要使用 RDD,有两种方法:1) 创建案例类 2) 创建 StuckType,就像您基于数据动态创建的那样。对于他们两个,我认为你不会得到你所期望的。

如果您无法使用Spark-CSV,请提供有关该问题的更多详细信息,我可以尝试提供解决方案。

我在循环中使用了数据帧上的以下 API 来更新列。

def withColumn(colName: String, col: Column): DataFrame

相关内容

  • 没有找到相关文章

最新更新