Spark rdd在scala中正确的日期格式?
Spark rdd correct date format in scala?
这是我将 RDD 转换为 Dataframe 时要使用的日期值。
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就可以工作了。
如何更正日期格式以转换为数据框?
//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)
Spark 的 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
这是我将 RDD 转换为 Dataframe 时要使用的日期值。
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就可以工作了。 如何更正日期格式以转换为数据框?
//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)
Spark 的 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