'列表'对象没有属性' map'

时间:2016-10-27 10:07:44

标签: apache-spark pyspark rdd

我知道map是一个函数而不是列表方法的原因。但有没有办法可以使用map函数将数据传递给map中调用的函数。

这是我的代码:

def func1(lines):
    global newlst
    for line in lines:
        qtype = re.search("qtype=(\S+)",str(line))  
        ......
file = sc.textFile("C:\\TestLogs\\sample.log").cache()
result = file.map(lambda x: x.split("\n")).collect()
print(type(result)) #it is a list
lines = result.map(func1).collect() #I want to pass the contents of result to func1 through map function.

错误:

    lines = result.map(func1).collect()
AttributeError: 'list' object has no attribute 'map'

我是否有其他方式可以将数据从results传递到func1,但是使用map或生成rdd的spark中的任何概念?

1 个答案:

答案 0 :(得分:1)

问题在于你调用collect来存储RDD的结果:

result = file.map(lambda x: x.split("\n")).collect()

此命令将返回一个列表,而不是RDD。 如果您从此行中删除collect(),请执行以下操作:

result = file.map(lambda x: x.split("\n"))

这将有效。