我正在尝试从pyspark中的csv文件的标题中形成字符串列表。 csv文件中的标头采用unicode格式。我编写了这个代码来读取标题,但它并没有形成包含标题中各个值的列表:
def filter(line):
return line
read_file = sc.textFile('file:///file1.csv').zipWithIndex().filter(lambda (line, rownum): rownum == 0).map(lambda (line, rownum): line)
data = (read_file
.map(lambda line: line.split(","))
.filter(lambda line: len(line) >= 1)
.map(filter))
print data.collect()
我看到的输出如下所示:
[[u'header1', u'header2', u'header3', u'header4', u'header5']]
虽然我希望它是['header1','header2','header3','header4','header5']
如何更正并形成清单?
答案 0 :(得分:1)
足以解决您的具体问题:
只需使用flatMap
代替map
data = read_file.flatMap(lambda l: l.split(","))
显然,[0]
中的data.collect()[0]
结果也是一种解决方案。
然而,你当前这样做的方式是迭代整个文件以丢弃除第一个之外的所有行。我建议在rdd。
上使用.take(1)
first_line = sc.textFile('test.csv').take(1)
first_line[0].split(",")
第二个解决方案在长文件上要快得多。
另请注意,您的过滤功能目前无法用于任何目的,您可以省略.map(filter)
。