RDD 到 pyspark 中的 DataFrame(来自 rdd 的第一个元素的列)

RDD to DataFrame in pyspark (columns from rdd's first element)

我从 c​​sv 文件创建了一个 rdd,第一行是该 csv 文件中的 header 行。现在我想从该 rdd 创建数据框并保留 rdd 的第一个元素的列。

问题是我能够从 rdd.first() 创建数据框和列,但创建的数据框的第一行是 headers 本身。如何删除它?

lines = sc.textFile('/path/data.csv')
rdd = lines.map(lambda x: x.split('#####'))  ###multiple char sep can be there #### or #@# , so can't directly read csv to a dataframe
#rdd: [[u'mailid', u'age', u'address'], [u'satya', u'23', u'Mumbai'], [u'abc', u'27', u'Goa']]  ###first element is the header
df = rdd.toDF(rdd.first())  ###retaing te column from rdd.first()
df.show()
#mailid  age  address
 mailid  age  address   ####I don't want this as dataframe data
 satya    23  Mumbai
 abc      27  Goa

如何避免第一个元素移动到数据框数据。我可以在 rdd.toDF(rdd.first()) 中给出任何选项来完成吗??

注意:我无法收集 rdd 以形成 list ,然后从该列表中删除第一项,然后将该列表并行化以再次形成 rdd ,然后 toDF()...

求推荐!!!谢谢

您必须从 RDD 中删除 header。考虑到您的 rdd 变量,一种方法如下:

>>> header = rdd.first()
>>> header
# ['mailid', 'age', 'address']
>>> data = rdd.filter(lambda row : row != header).toDF(header)
>>> data.show()
# +------+---+-------+
# |mailid|age|address|
# +------+---+-------+
# | satya| 23| Mumbai|
# |   abc| 27|    Goa|
# +------+---+-------+