我正在尝试从Spark Structured Streaming中的S3存储桶中读取数据。以下代码用于获取现有数据。但是,当新数据添加到存储桶时,Spark不会选择它。
val lines = spark.readStream.schema(schemaImp).format("com.databricks.spark.avro").load("s3n://bucket/*")
val query = lines.writeStream.outputMode("append").format("memory").queryName("memtable").start()
query.processAllAvailable()
spark.sql("select * from memtable").show()
如何使这项工作获取新数据?或者,这是一个不受支持的功能吗?
答案 0 :(得分:1)
首先测试本地FS。如果它在那里工作但不对S3,那么它是s3重命名/提交的一些怪癖。如果它对本地FS不起作用,那么就是你使用流媒体的方式。也许尝试一个测试,只要调用.map()就会记录,所以你可以计算实际使用情况。
如果您正在使用流媒体和对象存储,(a)使用s3a而不是s3n,并且(b)直接保存到对象存储路径,而不是保存+重命名 - 您只需要这样做以避免处理文件系统上的不完整数据文件在编写时可见的文件