AttributeError:'list'对象没有属性'map'

时间:2018-03-30 05:17:05

标签: scala pyspark

我收到以下错误:

  

“AttributeError:'list'对象没有属性'map'”

这是我在pyspark中的代码:

val rawData = sc.textFile("/PATH/train.tsv")
val records = rawData.map(line => line.split("\t"))
val data = records.map(lambda line: line.map(lambda x: x.replace ("\"","")))

错误位于第3行,位于“line.map”。

此外,相应的scala行正常运行,没有任何问题:

val data = records.map { r => r.map(_.replaceAll("\"", ""))

它给了我想要的输出。

(数据集是从kaggle:http://www.kaggle.com/c/stumbleupon/data下载的。)

自过去两天以来一直在苦苦挣扎。请帮助。

由于 gshweta

2 个答案:

答案 0 :(得分:0)

您的问题是,您是在.map的论据上致电lambda

根据前面的RDD转换,map的lambda表达式的参数类型为list.split的结果)。

你可能想要编码:

records.map(lambda line: list(map(lambda x: x.replace("\"",""), line)))

不同之处在于函数mapmap(lambda x: x.replace("\"",""), line))是Python的内置函数(而且它既不是list函数 - 解释了你得到的错误 - 也不是Spark的RDD.map )。

答案 1 :(得分:0)

我认为您在使用 map 之前没有将数据并行化。使用以下代码:

val rawData = sc.textFile("/PATH/train.tsv")
val recordsParell=sc.parallelize(rawData)
val records = recordsParell.map(line => line.split("\t"))

sc.parallelize API 将有助于加载用户创建的非强制来自目录的数据。