如何使用pyspark将数据框保存在“.txt”文件中
Posted
技术标签:
【中文标题】如何使用pyspark将数据框保存在“.txt”文件中【英文标题】:How to save data frame in ".txt" file using pyspark 【发布时间】:2018-03-23 10:41:35 【问题描述】:我有一个包含 1000 多列的数据框。我需要将此数据框保存为没有标题的 .txt 文件(而不是 .csv),模式应为“追加”
在下面使用的命令不起作用
df.coalesce(1).write.format("text").option("header", "false").mode("append").save("<path>")
我遇到的错误
pyspark.sql.utils.AnalysisException: 'Text data source supports only a single column,
注意:不应该使用 RDD 来保存。因为我需要在同一个路径中多次保存文件。
【问题讨论】:
除了你尝试过的,你可以提到你得到了什么错误 我已经更新了问题 你想要的输出是什么?你想要空格而不是逗号吗? 【参考方案1】:如果您想为多列数据框写出文本文件,您必须自己连接列。在下面的示例中,我用空格分隔不同的列值,并用*
替换空值:
import pyspark.sql.functions as F
df = sqlContext.createDataFrame([("foo", "bar"), ("baz", None)],
('a', 'b'))
def myConcat(*cols):
concat_columns = []
for c in cols[:-1]:
concat_columns.append(F.coalesce(c, F.lit("*")))
concat_columns.append(F.lit(" "))
concat_columns.append(F.coalesce(cols[-1], F.lit("*")))
return F.concat(*concat_columns)
df_text = df.withColumn("combined", myConcat(*df.columns)).select("combined")
df_text.show()
df_text.coalesce(1).write.format("text").option("header", "false").mode("append").save("output.txt")
这给出了输出:
+--------+
|combined|
+--------+
| foo bar|
| baz *|
+--------+
你的输出文件应该是这样的
foo bar
baz *
【讨论】:
【参考方案2】:您可以使用以下行轻松连接列(假设您想要一个位置文件而不是分隔文件,对分隔文件使用此方法将要求您在每个数据列之间都有分隔列):
dataFrameWithOnlyOneColumn = dataFrame.select(concat(*dataFrame.columns).alias('data'))
连接列后,您的上一行应该可以正常工作:
dataFrameWithOnlyOneColumn.coalesce(1).write.format("text").option("header", "false").mode("append").save("<path>")
【讨论】:
以上是关于如何使用pyspark将数据框保存在“.txt”文件中的主要内容,如果未能解决你的问题,请参考以下文章