结构化流数据帧的中间动作(头/拍/第一)

时间:2019-12-17 07:49:37

标签: apache-spark pyspark spark-streaming

我正在尝试实现一个简单的逻辑:
我有一个流式数据框,正在侦听目录中的传入文件,并且我想根据第一个记录的字段进行特定的转换。

开箱即用,不支持此操作(因此出现错误),但 But ,我敢肯定,一定有某种方法可以实现此目的。请注意,在分支之前,我不需要每次都处理整个文件。

(我可能会误认为结构化流可能正在按记录和微批处理组记录,因此我可能需要在每次迭代中测试我的FOO / BAR字段。不确定这一点。任何说明/解决方案欢迎。)

文件1
文件2
文件3
...

过程文件1 =>如果第一个记录的类型为FOO,请执行FOO JOIN
______________ =>如果第一个记录为BAR类型,则执行BAR JOIN

过程文件2 ....

#Define Streaming Dataframe
DF = spark.readStream.schema(myschema).csv('/data/input')

#Test for an event type
EVENT_TYPE = DF.select('EVENT_TYPE').head().EVENT_TYPE #UNSUPPORTED

#If Foo Do Foo Transformation
if (EVENT_TYPE == 'FOO'):
    DF_NEXT = (DF.join(DF_FOO, DF.ID == DF_FOO.ID)

#If Bar Do Bar Transformation
elif (EVENT_TYPE == 'BAR'):
    DF_NEXT = (DF.join(DF_BAR, DF.ID == DF_BAR.ID) 

#Write Stream
DF_NEXT.writeStream.format("csv") \
                        .option("checkpointLocation",'/check') \
                        .outputMode("append") \
                        .start("/data/output")
  

pyspark.sql.utils.AnalysisException:
  “必须使用writeStream.start()执行带有流源的查询”

0 个答案:

没有答案