getmerge函数是否可以避免多个头?

qq24tv8q  于 2021-05-31  发布在  Hadoop
关注(0)|答案(1)|浏览(332)

我有一个python脚本,它将sparkDataframe保存为csv到hdfs。

df.write.format('com.databricks.spark.csv').save(filename, header='true', sep=',')

然后我需要合并hdfs中的part.csv文件,然后将它们作为单个.csv文件下载到本地位置。我正在使用-getmerge。我现在面临的问题是,在组合部件文件时,头被附加了多次,这是不需要的。我想得到一个只有一个头的.csv文件。有可能吗?

subprocess.call("/usr/local/hadoop/bin/hdfs dfs -getmerge " + filename + " " + single_csv, shell=True)

保存到hdfs时无法使用.coalesce(1),因为文件太大,导致预期内存不足。

roqulrg3

roqulrg31#

试试这个-

加载数据

val df1 = spark.range(2).withColumn("name", lit("foo"))
    df1.show(false)

    /**
      * +---+----+
      * |id |name|
      * +---+----+
      * |0  |foo |
      * |1  |foo |
      * +---+----+
      */

将数据保存为csv,不带标题

df1.write
      .mode(SaveMode.Overwrite)
      .csv("/path/test62709439")

    /**
      * part-0...csv
      * -------------
      * 0,foo
      *
      * part-1...csv
      * -------------
      * 1,foo
      *
      */

保存列名

spark.sql(s"select ${df1.columns.map(s => s"'$s'").mkString(", ")}")
      .write
      .mode(SaveMode.Append)
      .csv("/path/test62709439")

    /**
      * part...csv
      * -----------
      * id,name
      */

然后可以合并

相关问题