我有一个包含 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来保存。因为我需要在同一路径中多次保存文件。
最佳答案
如果您想为多列数据框写出文本文件,则必须自己连接列。在下面的示例中,我用空格分隔不同的列值,并用 *
:
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 *
关于apache-spark - 如何使用pyspark将数据帧保存在 ".txt"文件中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49447811/