to_avro 转confluent avro

import org.apache.avro.Schema
import org.apache.avro.generic.GenericData
import org.apache.avro.generic.GenericRecord
import io.confluent.kafka.serializers.KafkaAvroSerializer
import org.apache.spark.sql.functions._
import org.apache.spark.sql.avro.functions._
import org.apache.spark.sql.streaming._

val bootstrapServers = "localhost:9092"
val schemaRegistryUrl = "http://localhost:8081"
val topic = "my_topic"

// define schema
val schemaString = """{
  "type": "record",
  "name": "MyClass",
  "fields": [
    {"name": "field1", "type": "string"},
    {"name": "field2", "type": "int"}
  ]
}"""
val schema = new Schema.Parser().parse(schemaString)

// create Avro record
val record = new GenericData.Record(schema)
record.put("field1", "value1")
record.put("field2", 123)

// create KafkaAvroSerializer instance
val props = Map(
  "bootstrap.servers" -> bootstrapServers,
  "schema.registry.url" -> schemaRegistryUrl,
  "value.serializer" -> "io.confluent.kafka.serializers.KafkaAvroSerializer"
)
val kafkaAvroSerializer = new KafkaAvroSerializer()
kafkaAvroSerializer.configure(props.asJava, false)

// serialize Avro record as Confluent Avro format
val avroBytes = kafkaAvroSerializer.serialize(topic, record)

// convert DataFrame to Confluent Avro format and write to Kafka
val df = Seq(("value1", 123), ("value2", 456)).toDF("field1", "field2")
val avroDf = df.select(to_avro(struct("*")).alias("value"))
avroDf
  .writeStream
  .format("kafka")
  .option("kafka.bootstrap.servers", bootstrapServers)
  .option("topic", topic)
  .option("value.serializer", "io.confluent.kafka.serializers.KafkaAvroSerializer")
  .option("schema.registry.url", schemaRegistryUrl)
  .start()
  .awaitTermination()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值