我已将Avro(通用记录)格式的数据保存到Kafka中,然后进行了检索。数据由2个字符串类型字段和日期类型组成。当我保存到Kafka时,必须将日期转换为时间。但是,当我获得日期时,它将被设置为一些默认值。如何解决?
写给卡夫卡的日期:2019-03-19
保存到Kafka的日期时间:1552953600000
从卡夫卡检索的日期时间:1824561152
从日期时间转换的日期:1969-12-10
以下是写入Kafka的代码:
val avroRecord = new GenericData.Record(parseAvroSchemaFromFile("/avro-offset-schema.json"))
avroRecord.put("stringValue", tableNameValue)
avroRecord.put("stringValue2", codeValue)
avroRecord.put("date", state)
val producer = new KafkaProducer[String, GenericRecord](kafkaParams)
val data = new ProducerRecord[String, GenericRecord](kafkaTopic, avroRecord)
producer.send(data)
从Kafka读取数据的代码:
val dataRDD = KafkaUtils.createRDD(
sparkSession.sparkContext,
sparkAppConfig.kafkaParams.asJava,
offsetRanges,
LocationStrategies.PreferConsistent
)
val genericRecordsValues = dataRDD.map(record => record.value().asInstanceOf[GenericRecord])
val genericRecordsFields = genericRecordsValues.map(
record =>
(
record.get("TableName").toString,
record.get("Code").toString,
new Date(record.get(dayColumnName).asInstanceOf[Long])))
genericRecordsFields.first()