是否可以使用Spark Streaming SQL从Kafka主题实时解析JSON字符串?

时间:2018-09-18 22:52:45

标签: apache-spark pyspark apache-spark-sql spark-streaming

我有一个连接到kafka代理并创建名为temp的spark writeStream的Pyspark笔记本。 Kafka主题中的数据值为json格式,但我不确定如何创建一个可以实时解析此数据的spark sql表。我知道的唯一方法是创建表的副本,将其转换为RDD或DF,然后将值解析为另一个RDD和DF。可以在写入流时实时进行处理吗?

代码:

df = spark \
    .readStream \
    .format("kafka") \
    .option("kafka.bootstrap.servers","localhost:9092") \
    .option("subscribe","hoteth") \
    .option("startingOffsets", "earliest") \
    .load()

ds = df.selectExpr("CAST (key AS STRING)", "CAST(value AS STRING)", "timestamp")
ds.writeStream.queryName("temp").format("memory").start()
spark.sql("select * from temp limit 5").show()

输出:

+----+--------------------+--------------------+
| key|               value|           timestamp|
+----+--------------------+--------------------+
|null|{"e":"trade","E":...|2018-09-18 15:41:...|
|null|{"e":"trade","E":...|2018-09-18 15:41:...|
|null|{"e":"trade","E":...|2018-09-18 15:41:...|
|null|{"e":"trade","E":...|2018-09-18 15:41:...|
|null|{"e":"trade","E":...|2018-09-18 15:41:...|
+----+--------------------+--------------------+

1 个答案:

答案 0 :(得分:0)

我可以解决此问题的一种方法是像在Hive HQL中一样,仅横向查看json_tuple。我仍在寻找一种解决方案,该解决方案可以直接从流中解析数据,从而不会花费额外的处理时间来使用查询进行解析。

spark.sql("""
    select value, v1.transaction,ticker,price
    from temp 
    lateral view json_tuple(value,"e","s","p") v1 as transaction, ticker,price
    limit 5
    """).show()