Pyspark NLTK 保存输出

Pyspark NLTK save output

我正在使用 spark 2.3.1 并且正在对数千个输入文件执行 NLTK。

我从输入文件中提取 unigram、bigram 和 trigram 单词并将其保存在不同的数据框中。

现在我想将数据帧保存到 HDFS 中的相关文件中。 (每次将输出附加到同一个文件中) 所以最后我有三个名为 unigram.csv、bigram.csv、trigram.csv 的 CSV 文件,其中包含数千个输入文件的结果。

如果HDFS无法实现这种情况,您能否建议使用本地磁盘作为存储路径。

普通编程语言中的文件追加与Dataframe写模式追加不相似。每当我们要求 Dataframe 保存到一个位置文件夹时,它都会为每个 append 创建一个新文件。实现它的唯一方法,

  • 将旧文件读入dfOld : Dataframe
  • 合并新旧DataframedfOld.union(dfNewToAppend)
  • 合并为单个输出文件.coalesce(1)
  • 写入新的临时位置/tempWrite
  • 删除旧的 HDFS 位置
  • /tempWrite 文件夹重命名为您的输出文件夹名称
    val spark = SparkSession.builder.master("local[*]").getOrCreate;
    import org.apache.hadoop.fs._
    val fs = FileSystem.get(spark.sparkContext.hadoopConfiguration)
    /// Write you unigram Dataframe
    fs.rename(new Path(".../achyuttest.csv/part-00000..."), new Path("yourNewHDFSDir/unigram.csv")
    /// Write you bigram Dataframe
    fs.rename(new Path(".../achyuttest.csv/part-00000..."), new Path("yourNewHDFSDir/bigram.csv")
    /// Write you trigram Dataframe
    fs.rename(new Path(".../achyuttest.csv/part-00000"), new Path("yourNewHDFSDir/trigram.csv")
      ```