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

Sat*_*tya 4 python-2.7 apache-spark rdd pyspark pyspark-sql

我已经从csv文件创建了一个rdd,第一行是该csv文件中的标题行.现在我想从该rdd创建数据框并保留rdd的第一个元素的列.

问题是我能够使用rdd.first()中的列创建数据框,但创建的数据框的第一行作为标题本身.如何删除?

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
Run Code Online (Sandbox Code Playgroud)

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

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

请建议!!!谢谢

eli*_*sah 5

你必须从你的标题中删除标题RDD.一种方法是考虑你的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|
# +------+---+-------+ 
Run Code Online (Sandbox Code Playgroud)