Apache spark 如何在CSV文件中的更新行上运行流式查询?
我有一个csv文件在一个文件夹,是不断更新不断。我需要从这个csv文件中获取输入并生成一些事务。我如何从不断更新的csv文件中获取数据,比如说每5分钟一次 我尝试过以下方法:Apache spark 如何在CSV文件中的更新行上运行流式查询?,apache-spark,spark-structured-streaming,Apache Spark,Spark Structured Streaming,我有一个csv文件在一个文件夹,是不断更新不断。我需要从这个csv文件中获取输入并生成一些事务。我如何从不断更新的csv文件中获取数据,比如说每5分钟一次 我尝试过以下方法: val csvDF = spark .readStream .option("sep", ",") .schema(userSchema) .csv("file:///home/location/testFiles") 但问题是,它正在监视文件夹是否创建了任何新文件。。。但我的问题是只有一个文件在不断更新
val csvDF = spark
.readStream
.option("sep", ",")
.schema(userSchema)
.csv("file:///home/location/testFiles")
但问题是,它正在监视文件夹是否创建了任何新文件。。。但我的问题是只有一个文件在不断更新。首先,我不确定您是如何到达这里的,因为csv文件应该按顺序写入,这样可以实现更好的输入/输出。因此,我建议您创建一个仅附加的文件,并尝试获取流数据,就像从binlog获取数据一样 但是,如果您必须这样做,我认为StreamingContext可能会对您有所帮助
val ssc = new StreamingContext(new SparkConf(), Durations.milliseconds(1))
val fileStream = ssc.fileStream[LongWritable, Text, TextInputFormat]("/tmp", (x: Path) => true, newFilesOnly = false).map(_._2.toString)
首先,我不确定您是如何到达这里的,因为csv文件应该按顺序写入,这样可以实现更好的输入/输出。因此,我建议您创建一个仅附加的文件,并尝试获取流数据,就像从binlog获取数据一样 但是,如果您必须这样做,我认为StreamingContext可能会对您有所帮助
val ssc = new StreamingContext(new SparkConf(), Durations.milliseconds(1))
val fileStream = ssc.fileStream[LongWritable, Text, TextInputFormat]("/tmp", (x: Path) => true, newFilesOnly = false).map(_._2.toString)
我在一个文件夹位置有一个csv文件,每次都在更新。我需要从这个csv文件中获取输入并生成一些事务。我如何从不断更新的csv文件中获取数据,比如说每5分钟一次
tl;dr它不会起作用
默认情况下,Spark Structured Streaming监视目录中的文件,并为每个新文件触发计算。一旦文件被处理,该文件将不再被处理。这是默认的实现
您可以编写自己的流媒体源来监控文件的更改,但这是一个自定义源开发(在大多数情况下,这还不值得付出努力)
我在一个文件夹位置有一个csv文件,每次都在更新。我需要从这个csv文件中获取输入并生成一些事务。我如何从不断更新的csv文件中获取数据,比如说每5分钟一次
tl;dr它不会起作用
默认情况下,Spark Structured Streaming监视目录中的文件,并为每个新文件触发计算。一旦文件被处理,该文件将不再被处理。这是默认的实现
您可以编写自己的流媒体源来监控文件的更改,但这是一个定制的源代码开发(在大多数情况下,还不值得这么做)。
StreamingContext
是Spark流媒体的一部分,但OP使用Spark结构化流媒体。两个不同的Spark流媒体模块。StreamingContext
是Spark流媒体的一部分,但OP使用Spark结构化流媒体。两个不同的流式火花模块。