我正在通过PySpark阅读CSV文件。它是一个插入符号分隔的文件。它有5列。我只需要3列。
rdd = sc.textFile("test.csv").map(lambda x: x.split("^")).filter(lambda x: len(x)>1).map(lambda x: (x[0], x[2], x[3]))
print rdd.take(5)
如下所示,csv文件中的数据在第4条记录中有一个多行数据,最后一列只有一列。由于该文件只有5条记录,因此将spark视为6条记录。所以我面对索引超出范围错误。
file.csv中的数据:
a1^b1^c1^d1^e1
a2^b2^c2^d2^e2
a3^b3^c3^d3^e3
a4^b4^c4^d4 is
multiline^e4
a5^b5^c5^d5^e5
如何启用multilinewhile创建rdd通过sc.textFile()?
在我的分析中我发现,它不能通过sc.textFile()来完成,原因是我们只要将s3文件加载到rdd,然后rdd就会有一个元素列表作为s3文件的每个记录。在这个级别本身,多行中的每一行都被分成不同的记录。因此无法通过sc.textFile()实现。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。