在斯卡拉星火EET正确的日期格式?(Spark rdd correct date format in

2019-09-30 00:20发布

这是日期值我想,当我转换到RDD数据框使用。

Sun Jul 31 10:21:53 PDT 2016

此架构“DataTypes.DateType”抛出一个错误。

java.util.Date is not a valid external type for schema of date

所以,我想提前在这样一种方式,上述模式可以工作准备RDD。 我怎样才能纠正日期格式转换工作,以数据帧?

//Schema for data frame
val schema =
                StructType(
                    StructField("lotStartDate", DateType, false) ::
                    StructField("pm", StringType, false) ::
                    StructField("wc", LongType, false) ::
                    StructField("ri", StringType, false) :: Nil)

// rowrdd : [Sun Jul 31 10:21:53 PDT 2016,"PM",11,"ABC"]
val df = spark.createDataFrame(rddRow,schema)

Answer 1:

斯巴克的DateType可以从编码java.sql.Date ,所以你应该转换输入RDD使用该类型,例如:

val inputRdd: RDD[(Int, java.util.Date)] = ??? // however it's created

// convert java.util.Date to java.sql.Date:
val fixedRdd = inputRdd.map {
  case (id, date) => (id, new java.sql.Date(date.getTime))
}

// now you can convert to DataFrame given your schema:
val schema = StructType(
  StructField("id", IntegerType) :: 
  StructField("date", DateType) :: 
  Nil
)

val df = spark.createDataFrame(
  fixedRdd.map(record => Row.fromSeq(record.productIterator.toSeq)),
  schema
)

// or, even easier - let Spark figure out the schema:
val df2 = fixedRdd.toDF("id", "date")

// both will evaluate to the same schema, in this case


文章来源: Spark rdd correct date format in scala?