искра не может определить временную метку на java - PullRequest
0 голосов
/ 18 июня 2020

Я пытаюсь вывести схему из json -файла (Spark 2.4.5)

{
"timestampField":"08.06.2020 12:03:50"
}

        StructType mySchema = spark.read()
            .option("multiline", true)
            .option("inferSchema", true)
            .option("timestampFormat","MM.dd.yyyy HH:mm:ss")
            .json("cdr_json_schema.json")
            .schema();

   root
 |-- timestampField: string (nullable = true)

Я пробовал использовать файл формата по умолчанию и читать без опции ()

{
"timestampField":"2020-08-06T12:03:50.412+03:00"
}

Это все еще строка.

Ответы [ 2 ]

1 голос
/ 18 июня 2020

timestampFormat будет использоваться для столбцов Timestamp. Чтобы распознать столбцы временных меток из ввода json, вам необходимо указать схему, как показано ниже:


    val data =
      """
        |{
        |"timestampField":"08.06.2020 12:03:50"
        |}
      """.stripMargin
    val df = spark.read.option("multiLine", true).json(Seq(data).toDS())
    df.show(false)
    df.printSchema()
    /**
      * +-------------------+
      * |timestampField     |
      * +-------------------+
      * |08.06.2020 12:03:50|
      * +-------------------+
      *
      * root
      * |-- timestampField: string (nullable = true)
      */

    val df1 = spark.read
        .schema(StructType(StructField("timestampField", DataTypes.TimestampType) :: Nil))
      .option("multiLine", true)
      .option("timestampFormat", "MM.dd.yyyy HH:mm:ss")
      .json(Seq(data) toDS())
    df1.show(false)
    df1.printSchema()

    /**
      * +-------------------+
      * |timestampField     |
      * +-------------------+
      * |2020-08-06 12:03:50|
      * +-------------------+
      *
      * root
      * |-- timestampField: timestamp (nullable = true)
      */
0 голосов
/ 19 июня 2020

В качестве альтернативы мы можем использовать to_timestamp () в таком запросе:

df.select(to_timestamp(df.col("myStringTimestamp"),"MM.dd.yyyy HH:mm:ss").as("convertedTimestamp"));
...