使用 Spark 数据框转换列数据类型。
Converting column data type by using Spark data frame.
我有一个rdd,由于是从文本文件中读取的,所以类型全是string,大概有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) 创建案例 class 2) 像您基于数据动态创建的那样创建 StuckType。对于他们两个,我不认为你会得到你所期望的。
如果您无法使用 spark-csv,请提供有关该问题的更多详细信息,我可以尝试提供解决方案。
我在循环中对 dataFrame 使用了以下 api 来更新列。
def withColumn(colName: String, col: Column): DataFrame
我有一个rdd,由于是从文本文件中读取的,所以类型全是string,大概有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) 创建案例 class 2) 像您基于数据动态创建的那样创建 StuckType。对于他们两个,我不认为你会得到你所期望的。
如果您无法使用 spark-csv,请提供有关该问题的更多详细信息,我可以尝试提供解决方案。
我在循环中对 dataFrame 使用了以下 api 来更新列。
def withColumn(colName: String, col: Column): DataFrame