0

如果您正在使用 Apache Spark(我正在使用 PySpark)读取文件,那么您会期望每一行都有一个键。比如像这样

key1, timestamp1, value1
key2, timestamp2, value2
key1, timestamp3, value3
key1, timestamp4, value4

然后通过键减少到

key1 {{timestamp1, value1}, {timestamp3, value3}, {timestamp4, value4}}
key2 {{timestamp2, value2}}

这是最佳实践,因为在从 HDFS 读取时,您永远不知道文件在哪一行被拆分,并且在每一行中都有键有助于使用 map-reduce。但我的输入文件看起来不同:

key1
timestamp1, value1
timestamp3, value3
-------- split --------
timestamp4, value4
key2
timestamp2, value2
...

问题是 HDFS 可能会在随机位置拆分文件,因此当 Apache Hadoop Spark 集群的第二个节点读取文件的第二部分时,它会以{timestamp4, value4}开头,而不知道它属于 key1。

有没有办法解决这个问题?在进入集群之前,我想避免在本地机器上将输入文件转换为另一种格式。

也许使用自定义文件拆分器?我正在寻找 Python 2.7 (Pyspark) 中的解决方案。

感谢您的任何提示!

4

0 回答 0