Apache spark 如何使用java编写分隔为文本文件的spark dataframe选项卡
我有一个Spark数据集,其中有许多列必须用制表符分隔符写入文本文件。使用csv很容易指定该选项,但在使用Java时如何处理文本文件?选项1:Apache spark 如何使用java编写分隔为文本文件的spark dataframe选项卡,apache-spark,apache-spark-sql,Apache Spark,Apache Spark Sql,我有一个Spark数据集,其中有许多列必须用制表符分隔符写入文本文件。使用csv很容易指定该选项,但在使用Java时如何处理文本文件?选项1: yourDf .coalesce(1) // if you want to save as single file .write .option("sep", "\t") .option("encoding", "UTF-8") .csv("outputpath") 与编写csv相同,但这里需要使用tab
yourDf
.coalesce(1) // if you want to save as single file
.write
.option("sep", "\t")
.option("encoding", "UTF-8")
.csv("outputpath")
与编写csv相同,但这里需要使用tab delimeter
是的,正如您在评论中提到的,它是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而不是hdfs,则在尝试重命名之前,可能需要在下面进行设置
spark.sparkContext.hadoopConfiguration.set("fs.s3.impl", "org.apache.hadoop.fs.s3native.NativeS3FileSystem")
选项2:
其他选项(如果您不想使用CSVAPI)如下所示
yourDf.rdd
.coalesce(1)
.map(x => x.mkString("\t"))
.saveAsTextFile("yourfile.txt")
最后是一个.csv扩展名,虽然这不应该是一个问题,但如果可能的话,客户端似乎要求使用.txt扩展名。我给出了另一个选项,请检查。