Вариант 1:
yourDf
.coalesce(1) // if you want to save as single file
.write
.option("sep", "\t")
.option("encoding", "UTF-8")
.csv("outputpath")
То же, что и при написании CSV, но здесь необходимо использовать разделитель табуляции.
Да, его CSV как Вы упомянули в комментарии, если вы хотите переименовать файл, вы можете сделать следующее ..
import org.apache.hadoop.fs.FileSystem;
FileSystem fs = FileSystem.get(spark.sparkContext.hadoopConfiguration);
fs.rename(new Path("outputpath"), new Path(outputpath.txt))
Примечание: 1) вы можете использовать fs.globStatus, если у вас есть несколько файлов под вашим выходным путем в этом случае coalesce(1)
сделает один CSV, следовательно, не требуется. 2) если вы используете s3 вместо hdf, вам может потребоваться установить ниже, прежде чем пытаться переименовать ...
spark.sparkContext.hadoopConfiguration.set("fs.s3.impl", "org.apache.hadoop.fs.s3native.NativeS3FileSystem")
Вариант 2:
Другой вариант (если вы не хотите использовать CSV API) может быть, как показано ниже
yourDf.rdd
.coalesce(1)
.map(x => x.mkString("\t"))
.saveAsTextFile("yourfile.txt")