Альтернатива устаревшему java.sql.Date для Spark DataFrame - PullRequest
1 голос
/ 30 сентября 2019

Я пытаюсь создать Spark DataFrame с нуля для целей тестирования.

Дело в том, что я хочу столбец даты, и для этого я использую java.sql.Date, например:

val testSchema = List(
  StructField("test_string", StringType, true),
  StructField("test_date", DateType, true)
)

val testData = Seq(
    Row("hello", new java.sql.Date(2019 - 1900, 9, 29)),
    Row("world", new java.sql.Date(2019 - 1900, 7, 30))
)

val testDF = spark.createDataFrame(
  spark.sparkContext.parallelize(testData),
  StructType(testSchema)
)

Это делает работу, но java.sql.Date устарело, поэтому япробовал с java.time.LocalDate и с java.util.Date (создание его экземпляра напрямую и получение его из java.util.GregorianCalendar), получая оба раза один и тот же результат:

Причина: java.lang.RuntimeException: java. util.Date не является допустимым внешним типом для схемы даты

и

. Причина: java.lang.RuntimeException: java.time.LocalDate не является допустимымвнешний тип для схемы даты

Так что же является правильным заменой для java.sql.Date, которая соответствует схеме DateType?

1 Ответ

1 голос
/ 30 сентября 2019

С java.sql.Date.valueOf() должно работать:

  import java.sql.Date

  val testSchema = List(
    StructField("test_string", StringType, true),
    StructField("test_date", DateType, true)
  )

  val testData = Seq(
    Row("hello", Date.valueOf("2019-10-29")),
    Row("world", Date.valueOf("2019-08-30"))
  )

  val testDF = spark.createDataFrame(
    spark.sparkContext.parallelize(testData),
    StructType(testSchema)
  )

  testDF.show()
  testDF.printSchema()


+-----------+----------+
|test_string| test_date|
+-----------+----------+
|      hello|2019-10-29|
|      world|2019-08-30|
+-----------+----------+

root
 |-- test_string: string (nullable = true)
 |-- test_date: date (nullable = true)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...