2017-02-02 36 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