如何使用Apache Spark仅流式传输文件的一部分

时间:2018-06-28 08:16:15

标签: python apache-spark pyspark apache-spark-sql spark-streaming

我正在尝试将Spark Streaming和Spark SQL与Python API结合使用。

我有一个不断编辑的文件,它每N秒随机添加一些行。

该文件可以是JSON,XML,CSV或TXT,甚至可以是SQL表:我完全可以根据自己的情况选择最佳解决方案。

我有一定数量的字段,大约4-5。以该表为例:

+-------+------+-------+--------------------+ 
| event |  id  | alert |      datetime      |
+-------+------+-------+--------------------+
| reg   |  1   | def1  | 06.06.17-17.24.30  |
+-------+------+-------+--------------------+
| alt   |  2   | def2  | 06.06.17-17.25.11  |
+-------+------+-------+--------------------+
| mot   |  3   | def5  | 06.06.17-17.26.01  |
+-------+------+-------+--------------------+
| mot   |  4   | def5  | 06.06.17-17.26.01  |
+-------+------+-------+--------------------+

我想使用Spark Streaming流式传输仅新行。因此,如果我添加了2行,那么下次我只想流传输这两行而不是整个文件(已经流传输)

此外,每次找到新行时,我都希望对整个相同文件进行过滤或计算Spark SQL查询。例如,我只想选择事件"mot",只要它在10分钟内出现两次,并且每次文件更改和新数据到达时都必须重做此查询。

Spark Streaming和Spark SQL是否可以处理这些情况?又如何?

1 个答案:

答案 0 :(得分:1)

file sources Spark

不支持
  

读取写入目录的文件作为数据流。支持的文件格式为text,csv,json,orc,parquet。有关最新列表以及每种文件格式的受支持选项,请参见DataStreamReader界面的文档。 请注意,文件必须原子放置在给定目录中,在大多数文件系统中,这可以通过文件移动操作来实现

legacy streaming也是如此(请注意此2.2文档,但实现没有改变)

  

必须通过原子移动文件或将其重命名到数据目录中来在dataDirectory中创建文件。