python - 在 Spark 和 Python 中编写 flatMap 函数

标签 python apache-spark functional-programming pyspark

我正在尝试以列表理解的方式在 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/

相关文章:

python - 具有多个参数的用户定义函数返回 NULL 值

python - 如何将分区保存到特定名称的文件?

python - 用 str、float、int 和元组除法

Python套接字绑定(bind)到任何IP?

python - Matplotlib 图形中的进度线

scala - 将 Tuple2 的值部分(即映射)合并为按 Tuple2 的键分组的单个映射

Python 包构建 - 导入函数以在类定义中使用

functional-programming - 在这种情况下如何在 Racket 上订购我的累积变量?

Scala 映射函数删除字段

functional-programming - 同时折叠和贴图