如果您正在使用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)的解决方案。
感谢任何提示!