Pyspark NLTK сохраняет вывод - PullRequest
0 голосов
/ 06 мая 2020

Я использую Spark 2.3.1 и выполняю NLTK для тысяч входных файлов.

Из входных файлов я извлекаю слова из униграммы, биграммы и триграммы и сохраняю их в другом фреймворке.

Теперь я хочу сохранить фреймы данных в уважаемый файл в HDFS. (каждый раз добавление вывода в один и тот же файл) Итак, в конце у меня есть три файла CSV с именами unigram.csv, bigram.csv, trigram.csv, содержащие результат тысяч входных файлов.

Если этот сценарий не возможно с HDFS, можете ли вы предложить это с использованием локального диска в качестве пути хранения.

1 Ответ

1 голос
/ 06 мая 2020

Добавление файла на обычном языке программирования не похоже на добавление в режиме записи Dataframe. Всякий раз, когда мы просим Dataframe сохранить в папке расположения, он будет создавать новый файл для каждого добавления. Только так вы можете достичь этого:

  • Прочитать старый файл в dfOld : Dataframe
  • Объединить старый и новый Dataframe dfOld.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")
      ```
...