相当于 Python 中的 pySpark flatMap
Equivalent to pySpark flatMap in Python
我正在寻找一个函数来展平列表数组。
首先,我在 RDD 系统上使用 Apach Spark 函数 flatMap
实现了我的解决方案,但我想在本地执行此操作。但是,我无法找到
的等价物
samples = filtered_tiles.flatMap(lambda tile: process_tile(tile, sample_size, grayscale))
in Python 3. 有什么解决方法吗?
数组格式为:
samples = [(slide_num, sample)]
亲切的问候
这是 PySpark 在 RDD 上的 flatMap
示例:
sc.parallelize([3,4,5]).flatMap(lambda x: range(1,x)).collect()
这将产生
[1, 2, 1, 2, 3, 1, 2, 3, 4]
而不是仅 map
会产生 [[1, 2], [1, 2, 3], [1, 2, 3, 4]]
(用于比较)。
flatMap
也只做了"unnesting"的一级。换句话说,如果你有一个 3d 列表,它只会将它展平为 2d 列表。所以,我们也会让我们的扁平化器这样做。
正如评论中提到的,您所要做的就是调用内置的 map
,并创建一个展平函数,并将它们链接在一起。方法如下:
def flatMap(f, li):
mapped = map(f, li)
flattened = flatten_single_dim(mapped)
yield from flattened
def flatten_single_dim(mapped):
for item in mapped:
for subitem in item:
yield subitem
回到我们的示例作为快速完整性检查:
res = flatMap(lambda x: range(1, x), [3,4,5])
print(list(res))
输出:
[1, 2, 1, 2, 3, 1, 2, 3, 4]
随心所欲。你会做 flatMap(lambda tile: process_tile(tile, sample_size, grayscale), filtered_tiles)
(给定 filtered_tiles
是一个可迭代的)。
P.S。作为旁注,您可以在 "local" 模式下 运行 Spark,并且只需在 RDD 上调用 flatMap
。它适用于在本地机器上制作小东西的原型。然后,当您准备好扩展并有 TB 的数据需要撕裂时,您可以使用一些集群管理器连接到集群。
HTH.
我正在寻找一个函数来展平列表数组。
首先,我在 RDD 系统上使用 Apach Spark 函数 flatMap
实现了我的解决方案,但我想在本地执行此操作。但是,我无法找到
samples = filtered_tiles.flatMap(lambda tile: process_tile(tile, sample_size, grayscale))
in Python 3. 有什么解决方法吗?
数组格式为:
samples = [(slide_num, sample)]
亲切的问候
这是 PySpark 在 RDD 上的 flatMap
示例:
sc.parallelize([3,4,5]).flatMap(lambda x: range(1,x)).collect()
这将产生
[1, 2, 1, 2, 3, 1, 2, 3, 4]
而不是仅 map
会产生 [[1, 2], [1, 2, 3], [1, 2, 3, 4]]
(用于比较)。
flatMap
也只做了"unnesting"的一级。换句话说,如果你有一个 3d 列表,它只会将它展平为 2d 列表。所以,我们也会让我们的扁平化器这样做。
正如评论中提到的,您所要做的就是调用内置的 map
,并创建一个展平函数,并将它们链接在一起。方法如下:
def flatMap(f, li):
mapped = map(f, li)
flattened = flatten_single_dim(mapped)
yield from flattened
def flatten_single_dim(mapped):
for item in mapped:
for subitem in item:
yield subitem
回到我们的示例作为快速完整性检查:
res = flatMap(lambda x: range(1, x), [3,4,5])
print(list(res))
输出:
[1, 2, 1, 2, 3, 1, 2, 3, 4]
随心所欲。你会做 flatMap(lambda tile: process_tile(tile, sample_size, grayscale), filtered_tiles)
(给定 filtered_tiles
是一个可迭代的)。
P.S。作为旁注,您可以在 "local" 模式下 运行 Spark,并且只需在 RDD 上调用 flatMap
。它适用于在本地机器上制作小东西的原型。然后,当您准备好扩展并有 TB 的数据需要撕裂时,您可以使用一些集群管理器连接到集群。
HTH.