使用spark

时间:2016-11-30 14:56:24

标签: apache-spark pyspark binary-search

想象一下,我有一个格式的大日志文件:

Timestamp, text
Timestamp, text
Timestamp, text
Timestamp, text
Timestamp, text
Timestamp, text

日志文件已按时间戳排序。 如果我使用spark作为数据帧读取文件,然后在t1和t2之间的时间戳上进行过滤, 然后,如果时间戳在t1和t2之间,他会检查每条记录,这需要花费很多时间。

然而,有没有一种方法可以告诉我已经订购了df的火花,然后它会知道它只需要查找第一个和最后一个时间戳,并返回其间的所有行,这将是一个快得多?

1 个答案:

答案 0 :(得分:3)

不,火花中没有这样的选择。但是有不同的解决方案,广泛用于存储事件或称为分区的日志的系统中。如果您有多天的记录,请添加仅包含一天的新列:

Stream<Character>

然后使用partitionedBy保存此文件:

df.withColumn("day", df.timestamp.cast("date"))

这将为每天创建目录(并且列日不会保存在重写文件中),因此具有适当df_with_day.write.partitionBy("day").csv("partitioned") 过滤的下一个查询将忽略不在范围内的目录中的文件:

where