使用Spark数据框转换列数据类型。

时间:2016-03-12 23:32:25

标签: scala apache-spark spark-dataframe

我有一个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上的每个字段。

2 个答案:

答案 0 :(得分:0)

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

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

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

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

答案 1 :(得分:0)

我在循环中的dataFrame上使用了以下api来更新列。

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