2016-10-26 13 views
4

私はcsvファイルからrddを作成しました。最初の行はそのcsvファイルのヘッダー行です。今はそのrddからデータフレームを作成し、rddの第1要素からの列を保持したいと思います。pysparkのRDD to 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再び形成し、その後toDF()に戻ってそのリストを並列化、そのリストから最初の項目を削除し、リストを形成するために、RDDを収集することはできません...

示唆してください!ありがとう

+0

なぜDataFrameとして直接読み込まないのですか? – eliasah

+1

@ eliasah- Sparkは(spark.read.csvまたはdatabricks csvパッケージで)データフレームを形成するために複数の文字区切り文字(####や#@#など)を持つファイルを読み取ることはできません。読み込むファイル。 – Satya

+0

あなたのrddをDFに変換する前にヘッダーを削除してください。プラスあなたの質問で区切り記号はパイプです。だから、 "複数の文字区切り文字"の問題を推測しないだろう – eliasah

答えて

5

RDDからヘッダーを削除する必要があります。あなたのrdd変数を考慮すると、それを行う1つの方法は、

>>> 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| 
# +------+---+-------+ 
関連する問題