Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache spark 如何使用java编写分隔为文本文件的spark dataframe选项卡_Apache Spark_Apache Spark Sql - Fatal编程技术网

Apache spark 如何使用java编写分隔为文本文件的spark dataframe选项卡

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

我有一个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 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扩展名。我给出了另一个选项,请检查。