RDD 到 pyspark 中的 DataFrame(来自 rdd 的第一个元素的列)
RDD to DataFrame in pyspark (columns from rdd's first element)
我从 csv 文件创建了一个 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|
# +------+---+-------+
我从 csv 文件创建了一个 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|
# +------+---+-------+