apache-spark - 如何使用pyspark将数据帧保存在 ".txt"文件中

标签 apache-spark dataframe pyspark

我有一个包含 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/

相关文章:

apache-spark - Spark全阶段Java代码生成器模块之间有什么关系

java - 我如何使用java Spark转置csv数据

python - 根据列值使用 MultiIndex 对 pandas DataFrame 进行排序

python - 如何将 HIVE 访问集成到派生自 pip 和 conda 的 PySpark(而不是来自 Spark 发行版或包)

python - PySpark 无法正确读取 CSV

java - Spark /Java : NoClassDefFoundError in GSON dependency

scala - 如何在 Spark 1.6 的窗口聚合中使用 collect_set 和 collect_list 函数?

python - Pandas :在一行中向数据框添加多列

python - pandas-来自多索引数据帧的最大值

python - 从 PySpark 中 Groupby 之后的另一列的值获取最小值和最大值