【问题标题】:flatMap throws error -unicode item does not have attribute flatMapflatMap 抛出错误 - unicode 项没有属性 flatMap
【发布时间】:2025-11-21 21:50:01
【问题描述】:

给定一个输入 rdd 或表单

1: 6 7
2: 5

我怎样才能得到另一个表单的rdd

1 6
1 7
2 5

等等..

失败,消息 unicode 项没有属性 flatMap

def get_str(x,y):
    ..code to flatmap 
    return op
text = sc.textFile(inputs)
res = text.map(lambda l:l.split(":")).map(lambda (x,y):get_str(x,y))

【问题讨论】:

    标签: python apache-spark pyspark rdd


    【解决方案1】:

    我并不是很喜欢 Python,但您似乎正在尝试在您的 map 中使用 flatMap inside,但您需要将您的 map 替换为 @987654324 @。在 Scala 中,我会这样做:

    val text = sc.textFile(inputs)
    val res = text.map(l => l.split("[\\s:]+"))
                  .flatMap(list => list.drop(1).map(i => (list(0), i)))
    

    请注意,我拆分 " "":" 以获得值列表。

    Python 中也是这样:

    def to_seq(s):
        k, vs = s.split(":")
        for v in vs.split():
            yield k, v
    
    text = sc.parallelize(["1: 6 7", "2: 5"])
    res = text.flatMap(to_seq)
    res.take(3)
    
    ## [('1', '6'), ('1', '7'), ('2', '5')]
    

    【讨论】: