我是Spark流媒体的新手。我正在尝试使用本地csv文件进行结构化Spark流式传输。处理时我收到以下异常。
Exception in thread "main" org.apache.spark.sql.AnalysisException: Queries with streaming sources must be executed with writeStream.start();;
FileSource[file:///home/Teju/Desktop/SparkInputFiles/*.csv]
这是我的代码。
val df = spark
.readStream
.format("csv")
.option("header", "false") // Use first line of all files as header
.option("delimiter", ":") // Specifying the delimiter of the input file
.schema(inputdata_schema) // Specifying the schema for the input file
.load("file:///home/Teju/Desktop/SparkInputFiles/*.csv")
val filterop = spark.sql("select tagShortID,Timestamp,ListenerShortID,rootOrgID,subOrgID,first(rssi_weightage(RSSI)) as RSSI_Weight from my_table where RSSI > -127 group by tagShortID,Timestamp,ListenerShortID,rootOrgID,subOrgID order by Timestamp ASC")
val outStream = filterop.writeStream.outputMode("complete").format("console").start()
我创建了cron作业所以每隔5分钟我会得到一个输入csv文件。我试图通过Spark流式解析。
答案 0 :(得分:0)
(这不是一个解决方案,而是更多的评论,但考虑到它的长度,它最终会在这里结束。我会在收集到足够的信息进行调查后立即作出答案。)
我的猜测是您在df
上做的事情不正确,但您未在问题中提及。
由于错误消息大约为FileSource
,路径如下所示,并且它是一个必须为df
的流式数据集。
FileSource [文件:///home/Teju/Desktop/SparkInputFiles/*.csv]
鉴于我猜测的其他行,您将流数据集注册为临时表(即my_table
),然后在spark.sql
中使用它来执行SQL和{{ 1}}到控制台。
writeStream
如果这是正确的,那么您在问题中包含的代码就不完整,并且不会显示错误原因。
答案 1 :(得分:-1)
将.writeStream.start
添加到您的df
,正如异常告诉您的那样。
阅读docs了解更多详情。