我正在尝试以列表理解的方式在 python 中编写 flatMap 函数!
simpleRDD = sc.parallelize([2,3,4])
print(simpleRDD.map(lambda x:range(1, x)).collect())
输出是这样的:
[[1], [1, 2], [1, 2, 3]]
我已经编写了这样的 Map 函数并且它可以工作,这是正确的方法吗?
def myRange(x):
return [x for x in range(1,x)]
def myMap(func, myList):
return [func(i) for i in myList]
print(myMap(myRange, [2, 3, 4]))
但如果我想编写 flatMap 并实现以下代码在 spark 中生成的内容,它就无法工作。
print(simpleRDD.flatMap(lambda x:range(1, x)).collect())
输出是:
[1, 1, 2, 1, 2, 3]
这是我的尝试,但没有用。
def myRange(x):
return [x for x in range(1,x)]
def myFlatMap(func, myList):
return [*(func(i) for i in myList)]
print(myFlatMap(myRange , [2, 3, 4]))
最佳答案
编写 flatMap
的列表理解方式是使用嵌套 for 循环:
[j for i in myList for j in func(i)]
# ^outer loop ^inner loop
其中第一个循环是外层循环遍历myList
,第二个循环是内层循环通过func
遍历生成的列表/迭代器并放入结果列表中的每个元素都被展平了。
def myFlatMap(func, myList):
return [j for i in myList for j in func(i)]
myFlatMap(myRange, [2,3,4])
# [1, 1, 2, 1, 2, 3]
关于python - 在 Spark 和 Python 中编写 flatMap 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51002997/