[英]How to create a Spark-SQL dataframe from JSON file where data and schema are both listed
[英]How can I use spark-sql to read and process a JSON event from kafka?
详细说明:希望使用结构化火花流实现 Scala 代码,使用 DataFrame 从 Kafka 读取 JSON 事件,并使用 spark-sql 操作数据/列并将其写入 hive?
使用 Scala 2.11/spark 2.2
我明白创建连接是直截了当的:
val df = spark
.readStream
.format("kafka")
.option("kafka.bootstrap.servers", "host1:port1,host2:port2")
.option("subscribe", "topic1")
.load()
df.selectExpr("CAST(key AS STRING)", "CAST(value AS STRING)")
.as[(String, String)]
如何处理 JSON 事件? 假设所有事件都具有相同的模式,我是否必须提供模式,如果是的话,它是如何完成的,还有,如果有办法推断模式是如何完成的?
如果我理解正确,然后创建一个tempView ,我如何在该视图上运行类似 sql 的查询?
您的系统需要编辑:自动系统将此帖子标记为重复,但不是。 在链接的问题中,OP 要求修复他现有代码的问题,一个(有效的)答案解决了 JSON 反序列化的问题。 我的问题与上述不同。 如果我的问题不清楚,请具体询问,我会尽力进一步澄清。 谢谢你。
假设所有事件都具有相同的模式,我是否必须提供模式,如果是的话,它是如何完成的,还有,如果有办法推断模式是如何完成的?
更好的一面,如果您知道架构,请提供架构。 您可以按如下方式创建架构:
val schema = new StructType().add( "Id",IntegerType).add( "name",StringType)
然后从Kafka读取数据并反序列化如下:
val data_df = df.select(from_json(col("value"), schema).as("data")).select("data.*")
您可以使用 data_df 创建临时视图。
data_df.createOrReplaceTempView("data_df")
现在您可以使用 spark sql 查询视图
spark.sql("select * from data_df").show()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.