我确定这是非常简单的事情,但我没有找到与此相关的任何内容。
我的代码很简单:
...
stream = stream.map(mapper)
stream = stream.reduceByKey(reducer)
...
没什么特别的。输出看起来像这样:
...
key1 value1
key2 [value2, value3]
key3 [[value4, value5], value6]
...
等等。所以,有时我得到一个固定的值(如果它是单一的)。有时 - 嵌套列表可能非常非常深(在我的简单测试数据中它是 3 级深)。
我尝试通过来源搜索“flat”之类的东西 - 但发现只有 flatMap 方法(据我了解)不是我需要的。
我不知道为什么这些列表是嵌套的。我的猜测是它们是由不同的流程(工人?)处理的,然后在没有展平的情况下连接在一起。
当然,我可以用 Python 编写代码来展开该列表并将其展平。但我相信这不是一个正常的情况——我认为几乎每个人都需要一个平坦的输出。
itertools.chain 在找到不可迭代的值时停止展开。换句话说,它仍然需要一些编码(上一段)。
那么 - 如何使用 PySpark 的本机方法展平列表?
谢谢