2017-02-02 78 views
0

我的數據幀輸出保存爲文本文件後刪除列名是如下,
DF.show(2)從火花數據幀,而把它作爲文本文件

+--------------+ 
|col1|col2|col3| 
+--------------+ 
| 10| 20| 30| 
| 11| 21| 31| 
+--------------+ 

- DF.rdd.saveAsTextFile(「路徑」)

Row(col1=u'10', col2=u'20', col3=u'30') 
Row(col1=u'11', col2=u'21', col3=u'31') 

數據幀有數百萬行和20列,我怎樣才能將其保存爲文本文件如下,即沒有列名和Python統一碼

10|20|30 
11|21|31 

在創建初始RDD我用下面的代碼去除統一碼,但仍然得到統一碼,

data = sc.textFile("file.txt") 
trans = data.map(lambda x: x.encode("ascii", "ignore").split("|")) 

提前感謝!

回答

1

我認爲你可以做到這

.map(lambda l: (l[0] + '|' + l[1] + '|' + l[3])).saveAsTextFile(...)

+0

謝謝@PeterK,這是爲這個例子DF工作,但我的實際DF包含數百萬行和20列,,,我怎麼能爲真正的DF做到這一點? – user491

+0

對不起,我能夠運行此爲我的實際DF,而最初嘗試時,我面臨的問題 - SyntaxError:非ASCII字符'\ xe2'在文件中,這[鏈接](http://stackoverflow.com/questions/ 21639275/python-syntaxerror-non-ascii-character-xe2-in-file)幫助我 – user491

+0

@ hadoop491如果您不想指定所有可以嘗試的列: .map(lambda x:'|'.join(地圖(STR,X))) –

0

在spark 2.0中,您可以將數據框直接寫入csv,這是我認爲您需要的。請參閱:https://spark.apache.org/docs/2.0.0/api/java/org/apache/spark/sql/DataFrameWriter.html

所以在你的情況下,可能只是做類似

df.write.option("sep", "|").option("header", "false").csv("some/path/")

有一個databricks插件火花1.x中提供了這個功能

https://github.com/databricks/spark-csv

至於把你的unicode字符串轉換爲ascii,看到這個問題:Convert a Unicode string to a string in Python (containing extra symbols)

+0

謝謝@Bradley凱澤和是否有火花1.x的任何可能性? – user491

+0

有一個用於spark 1.x的databricks插件,它提供了相同的功能。哎呀,我的意思是提到上面。 –

+0

我試圖作爲./pyspark --packages com.databricks:spark-csv_2.11:1.5.0 但它無法得到它的錯誤「Java網關進程退出之前發送驅動程序其端口號」,我認爲這是某種組織網絡阻塞,我可以下載它並將其放置在某個庫文件夾中? – user491