我希望使用Spark Structured流来读取Kafka的数据并处理它并写入Hive表。
val spark = SparkSession
.builder
.appName("Kafka Test")
.config("spark.sql.streaming.metricsEnabled", true)
.config("spark.streaming.backpressure.enabled", "true")
.enableHiveSupport()
.getOrCreate()
val events = spark
.readStream
.format("kafka")
.option("kafka.bootstrap.servers", "xxxxxxx")
.option("startingOffsets", "latest")
.option("subscribe", "yyyyyy")
.load
val data = events.select(.....some columns...)
data.writeStream
.format("parquet")
.option("compression", "snappy")
.outputMode("append")
.partitionBy("ds")
.option("path", "maprfs:/xxxxxxx")
.start()
.awaitTermination()
这确实会创建一个镶木地板文件,但是如何更改它以模仿类似的东西,以便它写入表格格式,可以使用(select * from)
从hive或spark-sql中读取data.write.format("parquet").option("compression", "snappy").mode("append").partitionBy("ds").saveAsTable("xxxxxx")
答案 0 :(得分:0)
我建议查看Kafka Connect for writing the data to HDFS。它是开源的,可用standalone或Confluent Platform的一部分。
要过滤和转换数据,您可以使用Kafka Streams或KSQL。 KSQL运行在Kafka Streams之上,为您提供了一种非常简单的方式来连接数据,过滤数据和构建聚合。
以下是在KSQL中进行数据流聚合的示例
SELECT PAGE_ID,COUNT(*) FROM PAGE_CLICKS WINDOW TUMBLING (SIZE 1 HOUR) GROUP BY PAGE_ID