尝试为Spark数据流的writeStream函数创建测试,如下所示:
SparkSession spark = SparkSession.builder().master("local").appName("spark
session").getOrCreate()
val lakeDF = spark.createDF(List(("hi")), List(("word", StringType, true)))
lakeDF.writeStream
.trigger(Trigger.Once)
.format("parquet")
.option("checkpointLocation", checkpointPath)
.start(dataPath)
但是我遇到以下异常: org.apache.spark.sql.AnalysisException:'writeStream'只能在流数据集/ DataFrame上调用;
我是流媒体的新手,请让我知道如何创建流数据帧/将上述常规数据帧转换为测试套件的流数据帧。
答案 0 :(得分:1)
在Spark结构化流中,使用SparkSession上的 readStream 在流中创建数据帧/数据集。如果未使用流创建数据帧/数据集,则不允许使用 writeStream 进行存储。
因此,使用 readStream 创建数据框/数据集,并使用 writeStream
存储数据框/数据集。 val kafkaStream = sparkSession.readStream.format("kafka")
.option("kafka.bootstrap.servers", "kafka-broker-hostname:port")
.option("subscribe", "topicname")
.load()
答案 1 :(得分:-1)
请考虑以下示例。
第一个适用于不流式传输的df。喜欢你的通过列表/序列创建的文件或df。
// Write key-value data from a DataFrame to a specific Kafka topic specified in an option
df.selectExpr("CAST(key AS STRING)", "CAST(value AS STRING)")
.write
.format("kafka")
.option("kafka.bootstrap.servers", "host1:port1,host2:port2")
.option("topic", "topic1")
.save()
第二个适用于流式传输的数据帧。例如从kafka或其他流媒体来源阅读。
// Write key-value data from a DataFrame to a specific Kafka topic specified in an option
val ds = df
.selectExpr("CAST(key AS STRING)", "CAST(value AS STRING)")
.writeStream
.format("kafka")
.option("kafka.bootstrap.servers", "host1:port1,host2:port2")
.option("topic", "topic1")
.start()
使用流数据框或像第一个示例一样更改代码。