从pyspark中的csv文件的标题中形成一个字符串列表

时间:2016-05-11 20:46:19

标签: python csv pyspark

我正在尝试从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']

如何更正并形成清单?

1 个答案:

答案 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)