我收到以下错误:
“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
答案 0 :(得分:0)
您的问题是,您是在.map
的论据上致电lambda
。
根据前面的RDD转换,map
的lambda表达式的参数类型为list
(.split
的结果)。
你可能想要编码:
records.map(lambda line: list(map(lambda x: x.replace("\"",""), line)))
不同之处在于函数map
(map(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 将有助于加载用户创建的非强制来自目录的数据。