Spark Structured Stream: 输出格式(file,foreach,console,memory)

当流数据处理完成后,有若干个模式将结果导出

1.kafka,

我不用kafka 贴一个指导链接把https://spark.apache.org/docs/latest/structured-streaming-kafka-integration.html

 

2.file(文件导出):

可以将流处理的结果导出到文件结果

query = wordCounts \
    .writeStream \
    .outputMode("append") \
    .format("json") \
    .option('checkpointLocation','file:/home/hadoop/Downloads/SQL_streaming/checkpoint')\
    .option('path','file:/home/hadoop/Downloads/SQL_streaming/output')\
    .start()

需要有checkpoint,和存储路径(这两个默认都是hdfs,如果需要本地要用file:/)

输出的文件格式可以是 csv,parquet,json等:

1. json导入mongoDB方便一些

2. parquet则可以直接重建Spark Dataframe

3. csv则不推荐,因为csv不可以储存timestamp格式数据

其次,每一个文件的生成与window的sliding相关,每一次sliding就生成一个文件。

 

3.foreach:

在structured streaming中,处理完成的仍然还是dataframe,foreach可以对处理完成的dataframe再次进行操作,foreach的操作是按行操作的,也就是Row by Row的方法(pyspark在2.4 之后支持foreach)

def process(dataframe):

    #打印结果
    print('high' if dataframe.average>95 else 'low')

    #也可以导出Row里的值
    name = dataframe.name
    average = dataframe.average #然后存到pandas,或者其他操作等等
    
    
    
    
query = wordCounts\
            .writeStream\
            .foreach(process)\
            .start()

query.awaitTermination(timeout=50)
query.stop()

ps: Row是一个只读的格式, 不能修改

 

4,console,memory

将结果打印到控制台,将结果dataframe储存到内存中

query = wordCounts \
    .writeStream \
    .outputMode("append") \
    .queryName('wordCounts1')\
    .format("console") \
    .start()
try:
    query.awaitTermination(timeout=50)
    query.stop()
except:
    print('problem')
    query.stop()

如果使用memory,那么会在内存中生成保存一个dataframe,dataframe的名字和query的名字一样

console和memory要注意:当每一个trigge发生时,console和memory都会直接保存处理流的完整结果到内存中(等价于collect),可能会内存爆炸。所以这两个一般用在测试当中。

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值