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
- 合并新旧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")
```
我正在使用 spark 2.3.1 并且正在对数千个输入文件执行 NLTK。
我从输入文件中提取 unigram、bigram 和 trigram 单词并将其保存在不同的数据框中。
现在我想将数据帧保存到 HDFS 中的相关文件中。 (每次将输出附加到同一个文件中) 所以最后我有三个名为 unigram.csv、bigram.csv、trigram.csv 的 CSV 文件,其中包含数千个输入文件的结果。
如果HDFS无法实现这种情况,您能否建议使用本地磁盘作为存储路径。
普通编程语言中的文件追加与Dataframe写模式追加不相似。每当我们要求 Dataframe 保存到一个位置文件夹时,它都会为每个 append 创建一个新文件。实现它的唯一方法,
- 将旧文件读入
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")
```