Spark数据帧在另存为文本文件时被附加方括号

问题描述 投票:0回答:2

我正在尝试在追加模式下将数据帧保存在hadoop中。

下面是命令:

df.repartition(5).map((row)=>row.toString()).write.mode(SaveMode.Append).text(op_dir)

问题是,hdfs文本文件中的数据在行的开头和行的末尾都有多余的方括号

hadoop dfs -cat op_dir/part*
[1,asdf,p1,Y]
[2,qwer,p2,N]
[3,,p5,Y]

[请提出如何写出不带方括号或括号的数据框

scala dataframe apache-spark apache-spark-sql rdd
2个回答
0
投票

您可以这样做

df.repartition(5).map((row) => "%s,%s,%s,%s".format(row(0),row(1),row(2),row(3))).write.mode(SaveMode.Append).text(op_dir)

或者也是

df.repartition(5).map((row) => row.mkString(",")).write.mode(SaveMode.Append).text(op_dir)

0
投票

这将解决您的问题-

   val df = Seq(
      ("a", 2, "c"),
      ("a", 2, "c"),
      ("a", 2, "c"),
      ("b", 2, "d"),
      ("b", 2, "d")
    ).toDF("col1", "col2", "col3")
    df.repartition(5).map((row)=>row.toString())
      .write.mode(SaveMode.Append)
      .text("/Users/sokale/models/x")

    /**
      * [a,2,c]
      * [b,2,d]
      */
    df.repartition(5).select(concat_ws(",", df.columns.map(col): _*))
      .write.mode(SaveMode.Append)
      .text("/Users/sokale/models/x2")

    /**
      * a,2,c
      * b,2,d
      */

© www.soinside.com 2019 - 2024. All rights reserved.