rdd到pyspark中的dataframe(rdd的第一个元素中的列)

wrrgggsh  于 2021-05-27  发布在  Spark
关注(0)|答案(1)|浏览(639)

我已经从csv文件创建了一个rdd,第一行是csv文件的头行。现在我想从该rdd创建dataframe,并从rdd的第一个元素保留列。
问题是我能够从rdd.first()创建dataframe和with列,但是创建的dataframe的第一行作为头本身。如何移除?

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

如何避免第一个元素移动到Dataframe数据。我可以在rdd.todf(rdd.first())中给出任何选项来完成这个任务吗??
注意:我不能将rdd收集到表单列表中,然后从该列表中删除第一项,然后再次将该列表并行化回表单rdd,然后再删除todf()。。。
请建议!!!谢谢

wfveoks0

wfveoks01#

你将不得不删除你的头 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|

# +------+---+-------+

相关问题