我正在尝试在追加模式下将数据帧保存在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]
[请提出如何写出不带方括号或括号的数据框
您可以这样做
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)
这将解决您的问题-
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
*/