4
我已經從csv文件創建了一個rdd,第一行是該csv文件中的標題行。現在我想從該rdd創建數據框並保留rdd第一個元素的列。RDD到pyspark中的DataFrame(來自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
如何避免第一個元素移動到數據幀數據。我可以在rdd.toDF(rdd.first())中給出任何選項來完成此操作嗎?
注:我不能收集RDD形成列表,然後從列表中刪除第一個項目,然後並行化列表回再次然後形成RDD toDF()...
請建議!謝謝
你爲什麼不讀它以CSV格式直接一個數據幀:這樣做是下列考慮您的
rdd
變量的一種方式? – eliasah@ eliasah- Spark不能通過(spark.read.csv或databricks csv包)來讀取具有多個字符分隔符(如#####或#@#)的文件以形成數據框,並且我有這樣的文件也可以讀取。 – Satya
因此,在將rdd轉換爲DF之前刪除標題。另外在你的問題中,分隔符是一個管道。所以不會猜測「多個字符分隔符」問題 – eliasah